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


80

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

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

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

Вы пробовали использовать оператор "или"? Как: $ ('a: not ([href * = "javascript | #"])')
Бас Слагтер,

Ваш исходный код работает нормально, поэтому, пожалуйста, опубликуйте еще код и HTML, чтобы мы могли увидеть, что пошло не так ...
Shadow Wizard делает

Ответы:


141

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

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

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]')

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 ()"?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.