老师,这样的写法是不是太低效率了?
来源:3-4 作业题
非凡哥大战哥斯拉
2019-01-30 09:47:00
var searchItem = $('.header-search'); var searchInput = $('.header-search-input'); var list = $('.list') list.css( { 'position': 'absolute', 'top': 35 } ) searchInput.keyup(function (e) { var searchText = searchInput.val(); if (searchText) { if (searchText == '鞋') { getAjax.shoes() getAjax.searchEnter(e) } else if (searchText == '音速3') { getAjax.single_item() getAjax.searchEnter(e) } } else { operateEle.hideLi() } }) searchInput.blur(function () { operateEle.hideLi() }) var getAjax = { shoes: function () { $.ajax({ url: '../homework/search.json', type: 'GET', dataType: 'json', success: function (data) { var data = data[0][0]; var reback = data.Results[0].Suggests; var len = reback.length; operateEle.hideLi() operateEle.createLi(reback, len) } }) }, single_item: function () { $.ajax({ url: '../homework/search.json', type: 'GET', dataType: 'json', success: function (data) { var data = data[1][0]; var reback = data.Results[0].Suggests; var len = reback.length; operateEle.hideLi() operateEle.createLi(reback, len) } }) }, searchEnter: function (e) { var searchText = searchInput.val(); if (e.keyCode == 13) { if (searchText == '鞋') { this.shoes_dispaly() } else if (searchText == '音速3') { this.single_dispaly() } } }, shoes_dispaly: function () { $.ajax({ url: '../homework/basketballShoes.json', type: 'GET', dataType: 'json', success: function (data) { var data = data[0][0]; var reback = data.Results[0].Suggests; var len = reback.length; operateEle.createDiv(reback) } }) }, single_dispaly: function () { $.ajax({ url: '../homework/basketballShoes.json', type: 'GET', dataType: 'json', success: function (data) { var data = data[1][0]; var reback = data.Results[0].Suggests; var len = reback.length; operateEle.createDiv(reback) } }) } } var operateEle = { createLi: function (arr, len) { var ul = document.createElement('ul'); ul.id = 'suggest' var fragment = document.createDocumentFragment(); ul.style.width = '99.5%'; ul.style.listStyle = 'none'; for (var i = 0; i < len; i++) { var li = document.createElement('li'); li.setAttribute('style', 'height:30px;line-height:30px') var suggestion = arr[i] li.innerHTML = suggestion['Txt']; li.onmouseover = function () { this.style.background = 'gray' } li.onmouseout = function () { this.style.background = 'white' } fragment.appendChild(li) } ul.appendChild(fragment); list.append(ul) list.show() }, hideLi: function () { if (list.html()) { list.html('') list.hide() } else { list.hide() } }, imgSrcGet: function (str) { var src = str.slice(13); var img = src.replace(".png", "") return img }, createDiv: function (arr) { var len = arr.length console.log(len) this.clearDiv(); var div = $('.commodityContainer') for (var i = 0; i < len; i++) { var suggestion = arr[i] var Txt = suggestion['Txt']; var num = suggestion['num']; var max = suggestion['max']; var discount = suggestion['discount']; var label = suggestion['label']; var shop = suggestion['shop']; var imageSrc = suggestion['image']; var image = this.imgSrcGet(imageSrc) var color = suggestion['color']; var size = suggestion['size']; var nonDiscount = suggestion['nonDiscount']; var box = document.createElement("div"); box.className = "mainCommodity" var str = '<div class="shopInfo">' + '<div class="shopMsg">' + '<input type="checkbox" name="shopMsg" id="shopMsg" class="shopMsg-input" autocomplete="off">' + '<label for="shopMsg">店铺:' + '<a href="#">' + shop + '</a>' + '</div>' + '</div>' + '<div class="commodityInfo">' + '<ul>' + "<li class='td-chk'>" + '<div class="td-inner">' + '<input type="checkbox" name="checkbox" autocomplete="off" >' + '</div>' + '</li>' + '<li class="td-item">' + '<div class="td-inner">' + '<a href="#" class="' + image + '">' + '</a>' + '<div class="item-info">' + '<div class="item-basis-info">' + '<a href="#">' + Txt + '</a>' + '</div>' + '<div class="item-other-info">' + '<div class="item-other-space"></div>' + '<div class="item-other-list">' + '<a href="#" title="支持信用卡支付">' + '<div class="bandCard"></div>' + '</a>' + '<a href="#" class="sevenDay" title="7天无理由">' + '<div class="sevenDay"></div>' + '</a>' + '<a href="#" title="消费者保障服务">' + '<div class="guarantee"></div>' + '</a>' + '</div>' + '</div>' + '</div>' + '</div>' + '</li>' + '<li class="td-info">' + '<div class="td-info-msg">' + '<p>' + color + '</p>' + '<p>' + size + '</p>' + '</div>' + '</li>' + '<li class="td-price">' + '<div class="td-inner">' + '<p class="non-discount">' + nonDiscount + '</p>' + '<p class="discount">¥+<span>' + num + '</span>' + '</p>' + '<div class="promotion">卖家促销' + '<i class="promotionIcon"></i>' + '</div>' + '<div class="proSlidedown">' + '<p class="newPro">卖家促销:新品大特价' + '</p>' + '<p>优惠:¥' + num + '</p>' + '</div>' + '</div>' + '</li>' + '<li class="td-amount">' + '<div class="item-amount">' + '<a href="#" class="amount-left amount-color">-</a>' + '<input type="text" name="amountNum" value="1" autocomplete="off">' + '<a href="#" class="amount-right">+</a>' + '</div>' + '<div class="stock">' + '574' + '</div>' + '<div class="outNum">' + '<span class="instr">最多只能购买</span>' + '<span class="stockNum"></span>+<em>件</em>' + '</div>' + '</li>' + '<li class="td-sum">' + '<em>¥</em><span>' + num + '</span>' + '</li>' + '<li class="td-operation">' + '<p>' + '<a href="#" class="delete">删除</a>' + '</p>' + '</li>' + '</ul>' + '</div>' box.innerHTML = str div.append(box) } }, clearDiv: function () { $('.commodityContainer').html('') } }
有没有什么办法,能像后端渲染那样用模板语言去替换每一条商品信息啊,以前用python的时候用个jinjia模板直接在html页面上{% for xx in xx %}{% endfor %}就完事了,感觉前端来渲染怎么好像反而更麻烦了。还是说我的方法比较笨,其实还有更高效率的办法?老师能提供另一个思路吗
1回答
你好,上传的代码测试是没有问题的。
素材中提供了template.js引擎模板:
在页面中也提供的布局:
同学可以使用这个模板来完成,可以参考下面的代码:
var searchItem = $('.header-search'); var searchInput = $('.header-search-input'); searchInput.keyup(function(e) { var searchText = searchInput.val(); $.get('json/search.json', { 'Query': searchText }, function(data) { for (var i = 0; i < data.length; i++) { //如果值与json中的query字段匹配,动态加载html if (searchText === data[i][0].Query) { var results = data[i][0].Results[0]; //js模板引擎 var $html = template('search', results); //下列列表dispaly:none的,当符合条件后 //调用show()函数,然后设定css样式 $('.list').html($html).show().css({ 'position': 'absolute', 'left': 0, 'top': $('.header-search-input').height() + 5 }) } } }); //如果值为空,则隐藏整个列表 if ($(this).val() === '') { $('.list').hide(); } //按下回车时,调用shoppingCart()函数。 if (e.which === 13) { shoppingCart(); } }) //搜索下拉列表隐藏 $(document).on('click', function(event) { $('.list').hide(); }); //购物车存放产品--- 通用function function shoppingCart() { //获取输入框的值,用于字符串匹配 var $val = $('.header-search-input').val(); $.get('json/basketballShoes.json', { 'Query': $val }, function(data) { for (var i = 0; i < data.length; i++) { if ($val === data[i][0].Query) { //字符串匹配 //当输入'鞋'时,会匹配第一个数组 //当输入'音速3'时,会匹配第二个数组。 //也可以自行修改字符串匹配规则。 var $data = data[i][0].Results[0].Suggests; var results = data[i][0].Results[0]; /*使用js模板引擎,结构与数据分离*/ var $html = template('basketBallShoes', results); $('.commodityContainer').html($html); } } }); }
里面json文件的路径需要按照自己的引入路径测试。
同学可以测试下这段代码,祝学习愉快!
相似问题