Я могу выбрать (с помощью 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)');
(без кавычек). @ Райнос: Почему? :not()
это селектор CSS3. jQuery может напрямую передавать селектор, querySelectorAll
если поддерживается ...
.not
и менее читабелен. Я должен был сказать: «Не селектор в jQuery»
:not()
. Этот селектор не является новым для Selectors 4 и не был изменен, чтобы разрешить кавычки. Однако он был изменен, чтобы разрешить более сложные селекторы. Если я не неправильно понял ваш комментарий ...
querySelectorAll
самым быстрым. Не реальный тест, но этого следовало ожидать, так как нет накладных расходов от внутреннего jQuery. :not()
на самом деле быстрее, предположительно потому, что Sizzle знает, что может оптимизировать его для использования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()
с ... Не так ли? div:not(#myid)
$("div:not(#myid)")
или
$("div").not("#myid")
основные способы выбрать все, кроме одного идентификатора
Вы можете увидеть демо здесь
$("div:not(#myid)")
, быстрее ... Проверьте оптимизацию sizzlejs при использовании собственного Javascript .querySelector()
или .querySelectorAll()
.
Это должно сработать:
$('div:not("#myid")')