以下两行之间是否存在速度/效率差异?
$("table td:not(:first-child)")
和
$("table td").not(":first-child")
我认为第一个会更好,因为它会删除对象,但是它是否存在实际差异并且是实质性的。
由于
答案 0 :(得分:27)
从jsperf测试中可以看出,:not
平均速度提高了一倍。总的来说,这种性能可能只是整个执行时间的一小部分。
jquery docs陈述:
.not()方法最终会为您提供更多可读性 选择而不是将复杂的选择器或变量推送到:not() 选择器过滤器在大多数情况下,这是一个更好的选择。
所以真的由你决定你获得的一秒的分数是否超过可读性。
答案 1 :(得分:14)
取决于浏览器。
支持querySelectorAll
的浏览器可以通过...
$("table td:not(:first-child)")
...因为它是一个有效的选择器。较旧的浏览器(IE7及更低版本)不会。
您需要小心使用:not()
选择器。 jQuery(Sizzle)使用非标准选择器扩展它,因此很容易打破qSA
。