jQuery-多个:not选择器


79

我正在尝试定位不以'#'开头并且不包含嵌入式javascript的页面范围的链接,但是我在确定如何正确构造选择器时遇到问题。

根据我搜索过的关于多个选择器的信息,这应该可以工作,两个选择器都可以独立工作,而不是一起工作!

$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...

您是否尝试过“或”运算符?像:$('a:not([href * =“ javascript |#”])')
Bas Slagter,2011年

您的原始代码运行正常,因此请发布更多代码和HTML,以便我们查看出了什么问题。–
Shadow Wizard为您

Answers:


139

尝试使用

$('a:not([href*=javascript]):not([href^=#])') ...

8
尽管这样做可以,但是您不必进行两次否定。我不知道这可能会对性能产生影响。我喜欢显性/简单不过,它可能是更容易阅读比$('a:not([href*=javascript],[href^=#])')
阿德里安成为

嗨@AdrienBe在这个小提琴中:jsfiddle.net/pranavcbalan/dd6tuent/2我想避免第二列和最后一列。我正在尝试按照您的建议执行此操作:$('input:not(:last:nth-​​child(2))',$ tr).each(function(){//迭代除last和second之外的输入tot + = Number($(this).val())|| 0; //解析并添加值,如果NaN则添加0}); 但这没有帮助。有什么想法吗?
3AK 2016年

@jtbandes,我也尝试过您的建议,不起作用。我在某处犯了一些小错误。您能否检查一下jsfiddle。
3AK 2016年

@Sizzler是否通过避免仅“一”列而使其首先工作?
Adrien Be'6

@Adrien是的。我能行。请检查这个小提琴。jsfiddle.net/sizzler/xodzm0qw/3我能够避免在这里使用size1列和total列。
3AK 2016年


16

jQuery所示-:not()中有多个选择器?,这是执行此操作的正确方法:

$( 'a:not([href*=javascript],[href^=#])' )

如果您已经有了选择器来否定变量,请不要忘记在逗号前后加上引号

var selOne = '[href*=javascript]';
var selTwo = '[href^=#]';
$('a:not(' + selOne + ',' + selTwo + ')')

我承认代码有些混乱,但是它有一个优势,您可以执行以下操作:

var selOne = '[href*=javascript], [href^=#]';
var selTwo = '.anotherSelector, .andAnother, .andSoOn';
$('a:not(' + selOne + ',' + selTwo + ')')

每当出于某种原因而需要对选择器进行分组时,它都是很有用的。在代码中其他位置使用同一组选择器。


使用相同技术的现场示例

$('div:not(.rose-flower,.bus-vehicle)').css('color','red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bus-vehicle">I am a bus</div>
<div class="strawberry-fruit">I am a strawberry</div>
<div class="rose-flower">I am a rose</div>

也在http://jsfiddle.net/bmL8gz5j/


:notvs .not():出于性能原因,应该使用:not而不是.not(),请参见使用“:not”和“ .not()”选择器之间的性能差异?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.