jQuery 的 $().each() 的排序顺序是不是得到保证?
Posted
技术标签:
【中文标题】jQuery 的 $().each() 的排序顺序是不是得到保证?【英文标题】: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
元素吗?
从我目前的测试来看,它们似乎确实以正确的顺序进行了迭代,但我找不到任何东西告诉我它是有保证的。
如果不能保证,按顺序遍历它们的下一个最佳替代方法是什么?
【问题讨论】:
不重复但可能会有所帮助***.com/questions/1099759/… 【参考方案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 中出现的顺序遍历列表项。
感谢您的帮助和提示。非常感谢。
【讨论】:
以上是关于jQuery 的 $().each() 的排序顺序是不是得到保证?的主要内容,如果未能解决你的问题,请参考以下文章
javascript与jQuery的each,map回调函数参数顺序问题