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


80

Я намагаюся націлити посилання на всю сторінку, які не починаються з "#" і не включають вбудований javascript, але у мене виникають проблеми з тим, як правильно структурувати селектор.

Виходячи з того, що я погуглив про декілька селекторів, це повинно працювати, обидва селектори працюють самостійно, тільки не разом!

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

Ви пробували оператор 'або'? Подібно: $ ('a: not ([href * = "javascript | #"])')
Bas Slagter

Ваш оригінальний код працює нормально, тому, будь ласка, опублікуйте більше коду та HTML, щоб ми побачили, що пішло не так ..
Майстер тіней вакцинує

Відповіді:


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 ти спочатку працював, уникаючи "лише" однієї колонки?
Адріен Бе,

@AdrienBe так. Я міг це зробити. Будь ласка, перевірте цю скрипку. jsfiddle.net/sizzler/xodzm0qw/3 Тут я можу уникнути стовпця size1 та загальної кількості.
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.