0

我在 Jquery 的第 12 天偶然发现了 :not() 选择器。

我想选择除一个之外的所有 H1,其中包括文本和包含更多文本的类的跨度。为了帮助您理解结构,以下是一些查询和结果:

查询1:

$('.block > section')

结果是:

[
<section class=​"businessapproaches">​…​&lt;/section>​
, 
<section class=​"abstract">​…​&lt;/section>​
, 
<section class=​"workexperience">​…​&lt;/section>​
, 
<section class=​"academic">​…​&lt;/section>​
, 
<section class=​"skillstable">​…​&lt;/section>​
]

查询 2

$('.block > section > h1')

结果是:

[
<h1>​Business Approach​&lt;/h1>​
, 
<h1>​Abstract​&lt;/h1>​
, 
<h1>​Work Experience​&lt;/h1>​
, 
<h1>​Academic Experience​&lt;/h1>​
, 
<h1>​…​&lt;/h1>​
]

如您所见,最后一个没有简单的文本可以排除。所以你知道它是什么,这里是:

[
<h1>​
"Skills Table : "
<span class=​"skillstablevisibility">​Technologies / Compliance / Certifications​&lt;/span>​
</h1>​
]

对于那些打算建议:last使用. 好消息是,在我添加新版块后,我可以保证我仍然需要选择除“技能表”之外的所有版块,所以您的帮助不会白费!:not():last

这些是我迄今为止尝试过的:

通过其索引尝试:

   $('.block > section > h1:not(:'$('.block > section > h1:nth-child(5)')')')

按其名称尝试:

$('.block > section > h1:not(:"Skills Table : "
    <span class=​"skillstablevisibility">​Technologies / Compliance / Certifications​&lt;/span>')')
4

1 回答 1

4

你可以做

$('.block > section > h1:not(:has("span.skillstablevisibility"))') 

那不会选择任何h1内部span.skillstablevisibility有的。

演示:http: //jsfiddle.net/joycse06/uZjJh/

更新

正如@Christian Varga上面评论的那样,上面的选择器表达式很昂贵,所以如果您可以控制标记创建您可以将类添加到h1自身,这将允许选择器像

$('.block > section > h1:not(.skillstable)');

哪个在性能上会更好。

如果您不能更改标记,您始终可以使用第一个标记。

于 2012-06-22T05:10:39.033 回答