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

Pie*_*olo 11 jquery jquery-selectors

让我们说我有一些

<TR style = "background-color : red ;">
Run Code Online (Sandbox Code Playgroud)

还有一些

<TR>
Run Code Online (Sandbox Code Playgroud)

(需要注意的是,冒号和分号旁边的空格是有意的,因为我正在处理的页面是以这种方式编写的)

现在,这个:

$('.detailtable tr:not([style~="darkgray"])')
Run Code Online (Sandbox Code Playgroud)

工作得很好.但它在这里说:

[name!="value"]无法利用本机DOM querySelectorAll()方法提供的性能提升.为了在现代浏览器中获得更好的性能,请使用$("your-pure-css-selector").而不是('[name ="value"]')

所以我想知道:我的表达是最好的一个或类似的东西:

$('.detailtable tr').not('[style~="darkgray"]') // this doesn't work!
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

Jos*_*ber 27

如果你真的想"选择一个属性中不包含字符串的元素",你应该使用*=而不是~=像这样:

$('.detailtable tr').not('[style*="darkgray"]');
Run Code Online (Sandbox Code Playgroud)

这是小提琴.


不,使用.not可能不会更快.querySelectorAll应该能够按原样解析该选择器.

看到这个小提琴.


编辑:如果您关心IE8那么多,那么使用该.not方法而不是:not选择器将为您带来小的性能提升.原因很简单:IE8支持属性选择器,但不支持否定选择器.