select属性中不包含字符串的元素

时间:2012-06-13 14:33:04

标签: jquery jquery-selectors

让我们说我有一些

<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!

表现更好?编写最后一个表达式的正确方法是什么?

提前致谢

3 个答案:

答案 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”)实际上比使用初始选择器旁边的函数要慢。事实上......他们显然“慢了两倍”。

我引用:

  1. $("#id p");
  2. $("#id").find("p");
  3.   

    了解这一点会让你感到惊讶   第二种方式可以比第一种方式快两倍?会心   哪些选择器优于其他选择器(以及为什么)是一个非常关键的建筑   阻止确保您的代码运行良好并且不会让您感到沮丧   等待事情发生的用户。

    我会和我的朋友.not一起去!

答案 2 :(得分:0)

W3C Recommendation开始,即使使用document.querySelectorAll(),您目前使用的内容也应该完美无缺。

也许您可以测试它是否按预期工作。