Jquery:not()表示带有span类</h1>的<h1>

时间:2012-06-22 05:04:23

标签: jquery jquery-selectors

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

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

查询1:

$('.block > section')

结果:

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

查询2

$('.block > section > h1')

结果:

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

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

[
<h1>​
"Skills Table : "
<span class=​"skillstablevisibility">​Technologies / Compliance / Certifications​</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​</span>')')

1 个答案:

答案 0 :(得分:4)

你可以做到

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

这不会选择其中包含h1的任何span.skillstablevisibility

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

<强>更新

如上所述@Christian Varga,上面的选择器表达式很昂贵,所以如果你可以控制标记创建你可以将类添加到h1本身,这将允许像

这样的选择器
$('.block > section > h1:not(.skillstable)');

性能会更好。

如果你不能改变标记你总是可以使用第一个。