我正在使用嵌套 $.each 函数迭代嵌套对象的 json 对象。问题是,当我使用内部 $.each 循环遍历嵌套对象时,它返回所有嵌套对象的键,而不仅仅是第一个嵌套对象。在第二次迭代中,它返回所有键减去第一个嵌套对象的键,依此类推。这是代码:
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);
});
});
<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>
结果如下:http://jsfiddle.net/TsJP5/82/
我做错了什么。我希望它能给
- 1 +a : a1
+b : b1
+c : c1
- 2 +a : a2
+b : b2
+c : c2
等等...
最佳答案
这一切都在您的 jQuery DOM 操作中。选择器#mydiv ul li ul
正在拉动#mydiv中的每个后代ul节点。
相反,我发现最干净的方法是单独构建每个 li 和后代 ul 并将它们附加到父节点:
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);
});
<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>
关于jQuery 迭代嵌套对象显示所有嵌套对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008698/