让我们说我有一些
<TR style = "background-color : red ;">
和一些
<TR>
(需要注意的是,冒号和分号旁边的空格是有意的,因为我正在处理的页面是以这种方式写的)
现在,这个:
$('.detailtable tr:not([style~="darkgray"])')
完美无缺。但是here它说:
[name!=&#34; value&#34;]无法利用本机DOM querySelectorAll()方法提供的性能提升。为了在现代浏览器中获得更好的性能,请使用$(&#34; your-pure-css-selector&#34;)。而不是(&#39; [name =&#34; value&#34;]&#39;)代替
所以我想知道:我的表达是最好的一个或类似的东西:
$('.detailtable tr').not('[style~="darkgray"]') // this doesn't work!
表现更好?编写最后一个表达式的正确方法是什么?
提前致谢
答案 0 :(得分:26)
如果您真的想“选择不包含属性中的字符串的元素”,则应使用*=
代替~=
,如下所示:
$('.detailtable tr').not('[style*="darkgray"]');
这是fiddle。
不,使用.not
可能不会更快。 querySelectorAll
应该能够按原样解析该选择器。
请参阅此fiddle。
编辑:如果您非常关心IE8,那么使用.not
方法代替:not
选择器可以提高性能。原因很简单:IE8支持属性选择器,但不支持否定选择器。
答案 1 :(得分:0)
I'd suggest you take a look at this.
有趣的是,伪选择器(如“:not”)实际上比使用初始选择器旁边的函数要慢。事实上......他们显然“慢了两倍”。
我引用:
$("#id p");
$("#id").find("p");
了解这一点会让你感到惊讶 第二种方式可以比第一种方式快两倍?会心 哪些选择器优于其他选择器(以及为什么)是一个非常关键的建筑 阻止确保您的代码运行良好并且不会让您感到沮丧 等待事情发生的用户。
我会和我的朋友.not
一起去!
答案 2 :(得分:0)
从W3C Recommendation开始,即使使用document.querySelectorAll()
,您目前使用的内容也应该完美无缺。
也许您可以测试它是否按预期工作。