在我网站的一个页面上,我有一个由用户创建的条目列表 - 其中包含<ul>
元素的标准HTML <li>
。
我想遍历列表,但元素的顺序很重要。
使用jQuery $('.myList li').each()
,我可以保证我会按照它们在DOM中出现的顺序获取li
元素吗?
到目前为止,我的测试似乎确实以正确的顺序进行了迭代,但我找不到任何可以保证它的保证。
如果不能保证,那么按顺序迭代它们的下一个最佳替代方法是什么?
答案 0 :(得分:69)
因此,在阅读了文档并离开之后仍然不太确定之后,我最终潜入了实际阅读jQuery源代码(感谢@ RoryMcCrossan的答案提示我)。
事实上(与@RoryMcCrossan所说的相反),$().each()
使用for...in
或for
,,具体取决于输入是对象还是数组
对于&#39;数组&#39;,它就足以成为类似数组的&#39;对象,这是jQuery对象的情况,因为它包含编号的元素列表和length
属性。
因此,对$().each()
的调用将使用for
而不是for...each
,因为它正在迭代jQuery对象。由于我们正在使用for
,我们知道我们可以保证$().each()
的迭代顺序与给定元素的顺序相匹配。
因此,这引出了一个后续问题,即原始查询给出的元素顺序是否保证与它们在DOM中出现的顺序相同。如果是的话,我应该没事。
答案可以在question linked in the comments by @Mritunjay中找到,答案是“是”,它们按照它们在DOM中出现的顺序返回。
所以最后的答案是肯定的,我可以使用$('.myList li').each()
并按照它们在DOM中出现的顺序遍历列表项。
感谢您的帮助和提示。非常感谢。