jQuery - несколько: не селектор

80

Я пытаюсь настроить таргетинг на общестраничные ссылки, которые не начинаются с символа «#» и не включают встроенный javascript, но у меня возникают проблемы с тем, как правильно структурировать селектор.

Основываясь на том, что я искал в Google о нескольких селекторах, это должно сработать, оба селектора работают независимо, но не вместе!

$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...
Hill79
источник
Вы пробовали использовать оператор "или"? Как: $ ('a: not ([href * = "javascript | #"])')
Бас Слагтер,
Ваш исходный код работает нормально, поэтому, пожалуйста, опубликуйте еще код и HTML, чтобы мы могли увидеть, что пошло не так ...
Shadow Wizard делает
возможный дубликат jQuery - несколько селекторов в: not ()?
Adrien Be

Ответы:

141

Попробуйте использовать

$('a:not([href*=javascript]):not([href^=#])') ...
jtbandes
источник
8
Хотя это работает, вы без необходимости отрицаете 2 раза. Я не знаю, это может повлиять на производительность. Хотя мне нравится ясность / простота, возможно, это будет легче читать, чем$('a:not([href*=javascript],[href^=#])')
Адриан Би
Привет, @AdrienBe В этой скрипке: jsfiddle.net/pranavcbalan/dd6tuent/2 Я хочу избежать второго и последнего столбца. Я пытаюсь сделать это по вашему совету: $ ('input: not (: last: nth-child (2))', $ tr) .each (function () {// перебираем входные данные, кроме последнего и второго tot + = Number ($ (this) .val ()) || 0; // анализируем и добавляем значение, если NaN, то добавляем 0}); но это не помогает. Любая идея, пожалуйста?
3AK
@jtbandes, я тоже пробовал с вашим предложением, не работает. Я где-то делаю небольшую ошибку. Не могли бы вы проверить файл jsfiddle.
3AK
@Sizzler, вы сначала заставили его работать, избегая "всего" одного столбца?
Adrien Be
@AdrienBe да. Я мог это сделать. Пожалуйста, проверьте эту скрипку. jsfiddle.net/sizzler/xodzm0qw/3 Я могу избежать столбца size1 и столбца total здесь.
3AK
43

Вы также можете попробовать:

$('a').not('[href^=#],[href*=javascript]')
DarkAjax
источник
1
Примечание: не забудьте добавить запятую между кавычками, если у вас уже есть селекторы в переменных. Например:$('a').not(selOne + ',' + selTwo + ',' + selX);
Адриан Би
Мы, вероятно, должны использовать, :notа не .not()между прочим, по соображениям производительности. см. stackoverflow.com/questions/8845811/…
Адриан Бе
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 ()"?

Адриан Бе
источник