Я можу вибрати (використовуючи jQuery) всі div-елементи у розмітці HTML таким чином:
$('div')
Але я хочу виключити певний div
(скажімо, маючи id="myid"
) з вищезазначеного вибору.
Як я можу це зробити за допомогою функцій Jquery?
Відповіді:
Просто:
$('div').not('#myid');
Використання .not()
видалить елементи, відповідні селектору, наданому йому, із набору, що повертається $('div')
.
Ви також можете використовувати :not()
селектор:
$('div:not(#myid)');
Обидва селектори роблять одне і те ж, проте :not()
це швидше , мабуть, тому, що механізм селектора jQuery Sizzle може оптимізувати його для власного .querySelectorAll()
виклику.
.not()
це , далеко краще :not()
.
$('div:not(#myid)');
(без лапок). @Raynos: Чому? :not()
є селектором CSS3. jQuery може безпосередньо передати селектор, querySelectorAll
якщо підтримується ...
.not
і менш читабельний. Я повинен був сказати ": не селектор у jQuery"
:not()
. Цей селектор також не є новинкою для селекторів 4, і він не був змінений, щоб дозволити котирування. Однак його було змінено, щоб дозволити більш складні селектори. Якщо я неправильно зрозумів ваш коментар ...
querySelectorAll
як найшвидший. Це не реальний орієнтир, але, як очікується, ми не бачимо жодних накладних витрат від jQuery. :not()
насправді швидше, мабуть, тому, що Сізл знає, що може оптимізувати його для використанняquerySelectorAll()
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
Ви можете просто зробити це по-старому. Не потрібно jQuery з чимось таким простим.
Професійні поради:
Набір елементів dom - це просто масив, тому використовуйте ваш улюблений toArray
метод на NodeList
.
Додавання елементів до набору просто
set.push.apply(set, arrOfElements);
Видалення елемента з набору є
set.splice(set.indexOf(el), 1)
Ви не можете легко видалити кілька елементів одночасно :(
.querySelector()
або .querySelectorAll()
with div:not(#myid)
швидше ... Чи так?
$("div:not(#myid)")
або
$("div").not("#myid")
це основні способи вибрати всі ідентифікатори, крім одного
Демонстрацію ви можете побачити тут
$("div:not(#myid)")
, швидше ... Перевірте оптимізацію sizzlejs для нього, коли використовуєте власний Javascript .querySelector()
або .querySelectorAll()
.
Це має зробити це:
$('div:not("#myid")')