我一直在使用jQuery测试DOM选择性能。
将$(“ul li:nth-child(999)”)与$(“ul li”)进行比较后,我得到一些问题.eq(999)
$("ul li:nth-child(999)");
$("ul li").eq(999);
请点击以下链接查看我的详细测试结果:
特别是Chrome在操作n-child伪类时表现不佳
我想知道为什么会造成这样的结果。
我可以获得任何算法,机制或参考资料吗?
如果有人帮助我,我将非常感激 感谢。
答案 0 :(得分:2)
您的测试结果很有趣。我也希望知道基础算法差异的正确答案。
不谈论这两个功能的算法,我不知道这是否有帮助。
但我认为只是功能......
首先,这两个功能略有不同。
$().eq
是 jQuery方法。它是自己的jQuery方法
稍有不同,':nth-child'
是 CSS选择器。它被传递给jQuery Engine,该引擎针对CSS引擎的性能进行了优化。
这两件事在功能上是不同的。
:nth-child(n)选择器匹配第n个孩子的每个元素,无论其父类的类型如何。
eq()方法返回一个元素,其中所选元素的特定索引号。
例如,
<body>
<div> div 1 </div>
<div> div 2 </div>
<div> div 3 </div>
<div>
div 4
<div> div 5</div>
<div> div 6</div>
</div>
</body>
如果使用$('body div').eq(2)
,它将返回<div> div 2 </div>
的jQuery对象,具体取决于索引2.
否则,如果您使用$('body div:nth-child(2)')
,它将返回<div> div 2 </div>
'和<div> div 6 </div>
'的jQuery对象集。
因为'nth-child(n)'css选择器返回'的第n个子节点'。
但我也不知道导致 eq()方法的根本原因是什么呢? 如果它没有用,我很抱歉。
答案 1 :(得分:0)
我无法在任何地方找到任何关于这个问题的答案,认为它可能是一个未知的bug。 所以我发了一封电子邮件给Chromium团队,这个问题已经在Chromium论坛正式开票。
您可以通过以下链接查看第n个孩子问题的门票:
感谢。