Как указано в 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/
:not
vs .not()
: Из соображений производительности следует использовать, :not
а не .not()
, см. Различия в производительности между использованием селекторов ": not" и ".not ()"?