当前位置: 首页 > 知识库问答 >
问题:

从json中创建动态li元素,带有typefirst-循环错误

拓拔泉
2023-03-14

我使用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项

我试过两种方法: 1.一个是我让html等于新的li元素,就像这样:html='

使用方法1,我得到以下结果:

我得到所有的颜色在一个单独的li,但我也得到一个额外的第一个li的颜色像这样:

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

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

<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个答案

南宫松
2023-03-14

好的,我刚刚为字符串创建了另一个条件,并将html equals代码放在那里。。否则一切都很好

if (typeof item.color === 'string') {
          html = "<li class='product-spot__variants-variant' style='background-color:"+ glassesColor +"' title='"+ glassesColor +"'>'"+ glassesColor +"'</li>";
        }
 类似资料:
  • 问题内容: 我写了这段代码,将图像加载到ImageView小部件中: 现在,我要加载多个图像。为此,我需要动态创建图像视图,但是我不知道如何… 我想在for循环中运行我的代码: 我的主要问题是在循环内动态创建多个ImageView 问题答案: 您可以根据需要修改布局,图像资源和任何图像(也可以是动态的)…

  • 我正在为我的(小型)程序编写单元测试,测试用例在大约30个不同的文件中指定 为了测试它,我只需要一个循环,它遍历所有文件,解析它们,并执行所需的操作。 问题是,在这种情况下,我的所有测试都将被视为一个测试,因为它与符号位于同一个函数中 是否可以以某种方式拆分它,而不必为每个测试文件使用单独的函数? 将所有测试作为一个测试用例的问题是,我看不到哪个测试用例失败了这个过程;如果一个失败了,其余的也失败

  • 问题内容: 我正在使用jQuery CSS函数设置某些元素的样式 这可行,但是页面加载后会动态创建部分元素。这应该是 我被创建的事件困住了。有任何想法吗? 问题答案: 创建的元素没有事件(无论如何都无法通用)。你可以 将规则添加到样式表,以便将其自动应用于新创建的元素 创建元素时,链接 css() 方法: 动态创建一个新的样式表:

  • 本文向大家介绍JS动态创建DOM元素的方法,包括了JS动态创建DOM元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS动态创建DOM元素的方法。分享给大家供大家参考。具体如下: 近日,因工作需要,需要通过点击某个元素后, 动态创建一个DOM元素并显示,因此写了一些相关的JS函数,在此记录,以作备忘: 使用示例: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍javascript元素动态创建实现方法,包括了javascript元素动态创建实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript元素动态创建实现方法。分享给大家供大家参考。具体分析如下: document.write只能在页面加载过程中才能动态创建 可以调用document的createElement方法来创建具有指定标签的DOM对象,然后通过调用

  • 问题内容: 我正在尝试使用jQuery的循环来遍历此JSON并将其添加到named中。JSON如下: 我通过使用以下代码获取此JSON: 有什么办法吗? 问题答案: 尝试(未试用): 我想了三个独立的循环,因为您可能希望对每个数据集进行不同的处理(justIn,recent,old)。如果没有,您可以执行以下操作: