【问题标题】:Is the sort order of jQuery's $().each() guaranteed?jQuery 的 $().each() 的排序顺序是否得到保证?
【发布时间】:2014-09-29 02:14:26
【问题描述】:
在我网站的一个页面上,我有一个由用户创建的条目列表 - 标准 HTML <ul>,其中包含 <li> 元素。
我想遍历列表,但是元素的顺序很重要。
使用 jQuery $('.myList li').each(),我能保证我会按照它们在 DOM 中出现的顺序获取 li 元素吗?
从我目前的测试来看,它们似乎确实以正确的顺序进行了迭代,但我找不到任何东西告诉我它是有保证的。
如果不能保证,按顺序遍历它们的下一个最佳替代方法是什么?
【问题讨论】:
标签:
javascript
jquery
html
sorting
【解决方案1】:
因此,在阅读完文档后仍然不太确定,我最终潜入实际阅读 jQuery 源代码(感谢@RoryMcCrossan 的回答提示我)。
事实上(与@RoryMcCrossan 所说的相反),$().each() 使用for...in 或for,取决于输入是对象还是数组。
对于“数组”,它是一个“类数组”对象就足够了,jQuery 对象就是这种情况,因为它包含一个编号的元素列表和一个length 属性。
因此,对$().each() 的调用将使用for 而不是for...each,因为它正在迭代一个jQuery 对象。并且由于我们使用的是for,我们知道我们可以保证$().each() 的迭代顺序将匹配给定元素的顺序。
所以这导致我提出一个后续问题,即原始查询给出的元素顺序是否保证与它们在 DOM 中出现的顺序相同。如果是这样,那我应该没事。
可以在question linked in the comments by @Mritunjay 中找到答案,答案是“是的,它们按照它们在 DOM 中出现的顺序返回。
所以最后的答案是肯定的,我可以使用 $('.myList li').each() 并按照它们在 DOM 中出现的顺序遍历列表项。
感谢您的帮助和提示。非常感谢。