jQuery的排序顺序是$()。each()是否有保证?

时间:2014-08-06 08:16:55

标签: javascript jquery html sorting

在我网站的一个页面上,我有一个由用户创建的条目列表 - 其中包含<ul>元素的标准HTML <li>

我想遍历列表,但元素的顺序很重要。

使用jQuery $('.myList li').each(),我可以保证我会按照它们在DOM中出现的顺序获取li元素吗?

到目前为止,我的测试似乎确实以正确的顺序进行了迭代,但我找不到任何可以保证它的保证。

如果不能保证,那么按顺序迭代它们的下一个最佳替代方法是什么?

1 个答案:

答案 0 :(得分:69)

因此,在阅读了文档并离开之后仍然不太确定之后,我最终潜入了实际阅读jQuery源代码(感谢@ RoryMcCrossan的答案提示我)。

事实上(与@RoryMcCrossan所说的相反),$().each()使用for...infor,具体取决于输入是对象还是数组

对于&#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中出现的顺序遍历列表项。

感谢您的帮助和提示。非常感谢。