jQuery迭代嵌套对象显示所有嵌套对象的键

时间:2017-03-24 20:35:51

标签: jquery json

我使用嵌套的$ .each函数迭代嵌套对象的json对象。问题是,当我使用内部$ .each遍历嵌套对象时,它返回所有嵌套对象的键,而不仅仅是第一个嵌套对象。在第二次迭代中,它返回所有键,而不是第一个嵌套对象的键,依此类推。这是代码:

-Filter
var data = {
  '1': {
    'a': '1a',
    'b': '1b',
    'c': '1c'
  },
  '2': {
    'a': '2a',
    'b': '2b',
    'c': '2c'
  },
  '3': {
    'a': '3a',
    'b': '3b',
    'c': '3c'
  }
};

var my_ul = $('#mydiv ul');
$.each(data, function(key, value) {
  $('<li>', {
    html: key + '<ul></ul>'
  }).appendTo(my_ul);
  var deep_ul = $('#mydiv ul li ul');
  $.each(value, function(k, v) {
    $('<li>', {
      html: k + ':' + v
    }).appendTo(deep_ul);
  });
});

结果如下:http://jsfiddle.net/TsJP5/82/

我做错了什么。我希望它能给出

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv">
  <ul></ul>
</div>
<div id="test"></div>

依旧......

1 个答案:

答案 0 :(得分:2)

全部在你的jQuery DOM操作中。选择器#mydiv ul li ul正在#mydiv中拉出每个ycendent ul节点。

相反,我发现它最干净的只是逐个构建每个li和decendent ul并将它们附加到父节点:

&#13;
&#13;
var data = {
            '1':{
                 'a':'1a',
                 'b':'1b',
                 'c':'1c'
                },
            '2':{
                 'a':'2a',
            	 'b':'2b',
                 'c':'2c' 
                },
            '3':{
                 'a':'3a',
            	 'b':'3b',
                 'c':'3c' 
                }
            };

var my_ul = $('#mydiv ul');

$.each(data, function(key, value){
    var li = $('<li>', {html:key});
    var deep_ul = $('<ul></ul>');
  
    $.each(value, function(k, v){
        $('<li>', {html:k + ':' + v}).appendTo(deep_ul);
    });

    deep_ul.appendTo(li)
    li.appendTo(my_ul);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="mydiv">
    <ul>
    </ul>
</div>

<div id="test">
</div>
&#13;
&#13;
&#13;