Я могу выбрать (с помощью 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")')