使用JSON根据ID附加到列表

时间:2015-11-15 13:08:37

标签: javascript jquery html arrays json

你好,我正在尝试使用json和jquery,而且我在生成列表方面一直处于困境。

我正在尝试从以下json文件构建列表

{

 "svg": [

{
  "Title":"cool",
  "Description":"This is what cool should be in accordance to spec"
},
{
  "Title":"cool-act",
  "Description":"This is more in keeping with how it behaves in flash"
},
{
  "Title":"speed",
  "Description":"this is a rapid test transition time is 100ms (+-), display is 100mm"
},
{
  "Title":"desirable",
  "Description":"This is a subtle experience"
},
{
  "Title":"Maker",
  "Description":"An alternative experience speakers"
},
{
  "Title":"Hole-out",
  "Description":"colour zooms out"
}


  ],

"css" : [

{
  "Title":"test",
  "Description":"test"
}
]


}

我正在进行ajax调用以使用该文件,我希望创建一个最终看起来像这样的列表:

<nav>
  <ul id="svg">
     <li>cool<li/>
     <li>cool-act<li/>
     <li>speed<li/>
     <li>desirable<li/>
     <li>Maker<li/>
     <li>Hole-out<li/>
  </ul>
  <ul id="css">
     <li>test<li/>
  </ul>
</nav>

这是我用来创建菜单代码的函数

function cannyMenu (data){


//Define categories,animation and title from JSON
$.each(data, function (category, animation) {

    // create menus based on arrays in object - svg, css etc.
    $('nav').append($('<ul>').attr('id', category));

    // create the list from each arrays object - e.g all titles within svg.
    $.each(animation, function (index, value) {

           $('ul').append($('<li>').text(value.Title));
    });

});

}

我遇到的这个问题是,虽然它确实添加了&#39; li&#39;每个元素的元素。它似乎将我的第二个数组中的li属性放入第一个使得html输出显示如下:

<nav>
  <ul id="svg">
     <li>cool<li/>
     <li>cool-act<li/>
     <li>speed<li/>
     <li>desirable<li/>
     <li>Maker<li/>
     <li>Hole-out<li/>
     <li>test<li/>/* gets duplicated */
  </ul>
  <ul id="css">
     <li>test<li/>
  </ul>
</nav>

我需要确保只将与自己的数组相关的属性输出到自己的列表中,但我不知道如何执行此操作。

欢迎任何建议或帮助

由于

2 个答案:

答案 0 :(得分:0)

问题在于,当您将<li>元素添加到页面中的所有<ul>元素时,无论其ID是什么。

您想要将值添加到具有特定ID的<ul>。所以改变:

$('ul').append($('<li>').text(value.Title));

$('#' + category).append($('<li>').text(value.Title));

希望能解决你的问题。

修改

甚至更好,将list元素保存到变量并使用:

  var listElement = $('<ul>').attr('id', category);
  // create menus based on arrays in object - svg, css etc.
  $('nav').append(listElement);

  // create the list from each arrays object - e.g all titles within svg.
  $.each(animation, function (index, value) {
    listElement.append($('<li>').text(value.Title));
  });

答案 1 :(得分:0)

问题是这个$('ul')适用于所有UL。当程序循环通过类别时,它将动画附加到导航中的所有UL。您可以将新创建​​的UL分配给变量,并避免使用第二个选择器:

var UL = $('nav').append($('<ul>').attr('id', category));

并使用它来附加LI

UL.append($('<li>').text(value.Title));