使用typeahead从json创建动态li元素 - 循环错误

时间:2015-05-29 11:37:59

标签: javascript json typeahead.js

使用typeahead.js我在json响应中从颜色项创建li元素

JSON:

"results": [
                {
                    "title": "The Collection",
                    "attribute": "The Collection",
                    "url": "#/test",
                    "image": "images/products/londonretro-caine.jpg",
                    "color": ["brown", "yellow", "grey"]
                },

json有一个颜色键,有时是一个字符串,有时是一个有多种颜色的数组

我已经完成了响应并动态创建了一个HTML

html += '<li></li>'

我添加了一个条件来检查json中的项是否是一个颜色数组。 如果它是一个颜色数组,我已经用尽可能多的li项替换了html,因为数组中有颜色

我尝试了两种方法: 1.一个是我使html等于新的li元素,如:html += '<li></li>...'

  1. 另一个是我已将html更改为数组并将li元素推入其中以替换原始html:html.push('<li></li>')
  2. 使用方法1,我得到以下结果:

    我在一个单独的li中获得所有颜色, 但我也得到了一个额外的第一个颜色,如:

    <li class='product-spot__variants-variant' style='background-color:brown,yellow,grey' title='brown,yellow,grey'>'brown,yellow,grey'</li>
    

    使用方法2,我只得到最后一个颜色的最后一个:

    <li class='product-spot__variants-variant' style='background-color:grey' title='grey'>'grey'</li>
    

    我在以下代码中留下了两个解决方案。 有任何想法吗?谢谢,请问它是否不清楚..

    我的先行代码:

    suggestion: function (item) {
    
            var glassesColor = item.color;
            var html = "<li class='product-spot__variants-variant' style='background-color:"+ glassesColor +"' title='"+ glassesColor +"'>'"+ glassesColor +"'</li>";
            _.forEach(item.color, function (k) {
              if (typeof item.color === 'object') {
                  html += "<li class='product-spot__variants-variant' style='background-color:"+ k +"' title='"+ k +"'>'"+ k +"'</li>";
    
                  html = [];
                  html.push("<li class='product-spot__variants-variant' style='background-color:" + k + "' title='" + k + "'>'" + k + "'</li>");
                  var myhtml = html.join(''); 
                  html = myhtml;   
              }
            });
            //console.log(html);
            var output = '<div class="search-autocomplete search-glasses">\n';
            output += '<a href="' + item.url + '">';
            output += (item.image ? '<img class="search-autocomplete__image" src="' + item.image + '" alt="' + item.title + '">' : '');
            output += '<span class="search-autocomplete__title">' + item.title + '</span>';
            output += (item.attribute ? '<span class="search-glasses__attribute">' + item.attribute + '</span>' : '');
            output += '<ul class="product-spot__variants">';
            output += html;
            output += '</ul>';
            output += '</a>\n';
            output += '</div>\n';
            return output;
          }
    

1 个答案:

答案 0 :(得分:1)

好吧所以我只是为字符串创建了另一个条件并将html等于代码放在那里.. 否则一切都很好

if (typeof item.color === 'string') {
          html = "<li class='product-spot__variants-variant' style='background-color:"+ glassesColor +"' title='"+ glassesColor +"'>'"+ glassesColor +"'</li>";
        }
相关问题