jQuery - 多个:not选择器

91

我想要选中全局链接,这些链接不以“#”开头,也不包含内嵌的JavaScript代码,但我在构建选择器时遇到了问题。

根据我在谷歌上搜索到的有关多个选择器的内容,这应该可以解决问题。这两个选择器单独使用时都有效,但放在一起就不起作用!

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

你尝试过使用“或”运算符吗?像这样:$('a:not([href*="javascript|#"])') - Bas Slagter
你的原始代码运行良好,请发布更多代码和HTML,以便我们查看出了什么问题。 - Shadow The Spring Wizard
可能是重复的问题:jQuery - 在:not()中使用多个选择器? - Adriano
3个回答

160

尝试使用

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

8
虽然这样做是可以的,但你不必要地否定了两次。这可能会对性能产生影响,我不确定。尽管如此,我喜欢它的明确性/简单性,这可能比 $('a:not([href*=javascript],[href^=#])') 更容易阅读。 - Adriano
嗨@AdrienBe 在这个fiddle中:https://jsfiddle.net/pranavcbalan/dd6tuent/2/ 我想避免第二列和最后一列。我正在尝试按照您的建议进行操作:$('input:not(:last :nth-child(2))', $tr).each(function() { // iterate over inputs except last and second one tot += Number($(this).val()) || 0; // parse and add value, if NaN then add 0 }); 但它没有帮助。有什么想法吗? - 3AK
@Sizzler,你是通过避免“只是”一个列来使它工作的吗? - Adriano
@Sizzler 很棒。这是一个不错的第一步。很抱歉我现在无法提供帮助,因为太忙了。祝你好运。 - Adriano
你最好现在就加上引号。比如:$('a:not([href*="javascript"]):not([href^="#"])')。否则,在控制台中有时会出现错误。 - JFC
显示剩余3条评论

49

你也可以尝试:

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

1
快速提示:如果您已经将选择器存储在变量中,请不要忘记在引号之间添加逗号。例如:$('a').not(selOne + ',' + selTwo + ',' + selX); - Adriano
顺便说一下,出于性能原因,我们可能应该使用:not而不是.not()。请参见https://dev59.com/NWox5IYBdhLWcg3w_JPd。 - Adriano

19

jQuery - Multiple Selectors in a :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/


:not.not():出于性能考虑,应该使用 :not 而非 .not(),详见“使用“:not”和“.not()”选择器的性能差异?”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接