Я могу выбрать (с помощью jQuery) все div в разметке HTML следующим образом:
$('div')
Но я хочу исключить конкретное div
(например, имеющее id="myid"
) из приведенного выше выбора.
Как я могу сделать это с помощью функций JQuery?
javascript
jquery
jquery-selectors
siva636
источник
источник
Ответы:
Просто:
$('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()
.var elements = $('div').not('#myid');
Это будет включать все div, кроме одного с идентификатором myid
источник
$('div:not(#myid)');
я думаю, это то, что вам нужно.
источник
Это должно сработать:
$('div:not("#myid")')
источник
Вы используете
.not
свойство библиотеки jQuery:$('div').not('#myDiv').css('background-color', '#000000');
Посмотрите это в действии здесь . Div #myDiv будет белым.
источник