我想要选中全局链接,这些链接不以“#”开头,也不包含内嵌的JavaScript代码,但我在构建选择器时遇到了问题。
根据我在谷歌上搜索到的有关多个选择器的内容,这应该可以解决问题。这两个选择器单独使用时都有效,但放在一起就不起作用!
$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...
我想要选中全局链接,这些链接不以“#”开头,也不包含内嵌的JavaScript代码,但我在构建选择器时遇到了问题。
根据我在谷歌上搜索到的有关多个选择器的内容,这应该可以解决问题。这两个选择器单独使用时都有效,但放在一起就不起作用!
$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...
尝试使用
$('a:not([href*=javascript]):not([href^=#])') ...
$('a:not([href*=javascript],[href^=#])')
更容易阅读。 - Adriano你也可以尝试:
$('a').not('[href^=#],[href*=javascript]')
$('a').not(selOne + ',' + selTwo + ',' + selX);
- Adriano:not
而不是.not()
。请参见https://dev59.com/NWox5IYBdhLWcg3w_JPd。 - Adriano如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()”选择器的性能差异?”