是jQuery的$().each()保证的排序顺序吗?

Sim*_*mba 41 html javascript sorting jquery

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

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

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

从我到目前为止的测试来看,似乎它们按照正确的顺序迭代,但我找不到任何告诉我它保证的东西.

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

Sim*_*mba 74

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

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

对于'array',它就足以成为一个'类数组'对象,这是jQuery对象的情况,因为它包含一个编号的元素列表和一个length属性.

因此,调用$().each()将使用for而不是for...each因为它迭代jQuery对象.由于我们正在使用for,我们知道我们可以保证迭代$().each()的顺序将匹配给定元素的顺序.

因此,这引出了一个后续问题,即原始查询给出的元素顺序是否保证与它们​​在DOM中出现的顺序相同.如果是的话,那我应该没问题.

答案可以在@Mritunjay在评论中链接问题中找到,答案是肯定的,它们按照它们在DOM中出现的顺序返回.

所以最后的答案是肯定的,我可以$('.myList li').each()按照它们在DOM中出现的顺序使用和遍历列表项.

感谢您的帮助和提示.非常感激.

  • 当然,您确实意识到从代码中挖掘答案并不能保证**未记录的**行为将来不会改变。如果这是我的项目,我会找到一种方法来实际保证所需的行为,假设 `$().each()` 不能保证按所需的顺序执行。 (2认同)