我正在尝试定位不以“#”开头的页面范围链接,并且不包含内联javascript,但是我在确定如何正确构造选择器方面遇到了问题。
根据我用Google搜索的多个选择器,这应该有效,两个选择器都可以独立工作,而不是一起工作!
$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...
答案 0 :(得分:121)
尝试使用
$('a:not([href*=javascript]):not([href^=#])') ...
答案 1 :(得分:37)
您也可以尝试:
$('a').not('[href^=#],[href*=javascript]')
答案 2 :(得分:14)
如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
vs .not()
:出于性能原因,您应该使用:not
而不是.not()
,请参阅Performance differences between using ":not" and ".not()" selectors?