Я можу вибрати (використовуючи 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")')