$.each内$.each使用JS多维obj
$.each within $.each using JS multi-dimensional obj
我为一些页脚内容创建了一个对象,如下所示:
var $footerObj = {
"one" : {
"title" : "One",
"links" : {
"A" : {
"title" : "One A",
"url" : "#",
"external" : true
},
"B" : {
"title" : "One B",
"url" : "#",
"external" : true
},
"C" : {
"title" : "One C",
"url" : "#",
"external" : false
}
}
},
"two" : {
"title" : "Two",
"links" : {
"A" : {
"title" : "Two A",
"url" : "#",
"external" : false
},
"B" : {
"title" : "Two B",
"url" : "#",
"external" : false
}
}
}
};
我正在尝试使用 jQuery 的 $.each 将其输出到一些页脚链接中。
$.each($footerObj, function(key, value) {
$('.footer__links').append('<ul class="footer__list"></ul>');
var $footerList = $('.footer__list');
$.each(value.links, function(subkey, subvalue) {
$footerList.append('<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>');
});
});
这是我的,但这导致"two"中的数据被输出两次。我相信第二个 $.each 中的 value.links 是错误的,但我一直在疯狂尝试所有不同的变体但没有运气 - 任何帮助将不胜感激!
谢谢
当您追加到 class 时,它将追加到具有 class 的每个项目,在第二个对象上,将有两个具有该 calss,在第三个对象上将有三个等。解决方案是附加到您在该循环中创建的元素,而不是附加到具有该 class 名称的每个元素。在你的外部 each()
循环中执行此操作:
var $footerList = $('<ul class="footer__list"></ul>');
$('.footer__links').append($footerList);
所以看起来像这样:
$.each($footerObj, function(key, value) {
var $footerList = $('<ul class="footer__list"></ul>');
$('.footer__links').append($footerList);
$.each(value.links, function(subkey, subvalue) {
$footerList.append('<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>');
});
});
在你的第二个 $.each
中,你正在调用 $footerList
来附加你的元素。
这个变量设置在第一个$.each
并检索所有class footer__list
的元素。在第一个 $.each
的第二次迭代中,您将有两个
<ul class="footer__list"></ul>
因此 $('.footer__list');
将 return 2 个元素,您将追加
'<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>
对于这两个元素,你的 <ul>
我为一些页脚内容创建了一个对象,如下所示:
var $footerObj = {
"one" : {
"title" : "One",
"links" : {
"A" : {
"title" : "One A",
"url" : "#",
"external" : true
},
"B" : {
"title" : "One B",
"url" : "#",
"external" : true
},
"C" : {
"title" : "One C",
"url" : "#",
"external" : false
}
}
},
"two" : {
"title" : "Two",
"links" : {
"A" : {
"title" : "Two A",
"url" : "#",
"external" : false
},
"B" : {
"title" : "Two B",
"url" : "#",
"external" : false
}
}
}
};
我正在尝试使用 jQuery 的 $.each 将其输出到一些页脚链接中。
$.each($footerObj, function(key, value) {
$('.footer__links').append('<ul class="footer__list"></ul>');
var $footerList = $('.footer__list');
$.each(value.links, function(subkey, subvalue) {
$footerList.append('<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>');
});
});
这是我的,但这导致"two"中的数据被输出两次。我相信第二个 $.each 中的 value.links 是错误的,但我一直在疯狂尝试所有不同的变体但没有运气 - 任何帮助将不胜感激!
谢谢
当您追加到 class 时,它将追加到具有 class 的每个项目,在第二个对象上,将有两个具有该 calss,在第三个对象上将有三个等。解决方案是附加到您在该循环中创建的元素,而不是附加到具有该 class 名称的每个元素。在你的外部 each()
循环中执行此操作:
var $footerList = $('<ul class="footer__list"></ul>');
$('.footer__links').append($footerList);
所以看起来像这样:
$.each($footerObj, function(key, value) {
var $footerList = $('<ul class="footer__list"></ul>');
$('.footer__links').append($footerList);
$.each(value.links, function(subkey, subvalue) {
$footerList.append('<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>');
});
});
在你的第二个 $.each
中,你正在调用 $footerList
来附加你的元素。
这个变量设置在第一个$.each
并检索所有class footer__list
的元素。在第一个 $.each
的第二次迭代中,您将有两个
<ul class="footer__list"></ul>
因此 $('.footer__list');
将 return 2 个元素,您将追加
'<li class="footer__item"><a class="footer__link" href="' + subvalue.url + '">' + subvalue.title + '</a></li>
对于这两个元素,你的 <ul>