Posso selecionar (usando jQuery) todos os divs em uma marcação HTML da seguinte maneira:
$('div')
Mas eu quero excluir um determinado div
(digamos, ter id="myid"
) da seleção acima.
Como posso fazer isso usando funções Jquery?
Respostas:
Simples:
$('div').not('#myid');
O uso de .not()
removerá os elementos correspondentes ao seletor fornecido a ele do conjunto retornado por $('div')
.
Você também pode usar o :not()
seletor:
$('div:not(#myid)');
Ambos os seletores fazem a mesma coisa, porém :not()
é mais rápido , presumivelmente porque o motor do seletor do jQuery, Sizzle, pode otimizá-lo para uma .querySelectorAll()
chamada nativa .
.not()
é muito, muito melhor do que :not()
.
$('div:not(#myid)');
(sem aspas). @Raynos: Por quê? :not()
é um seletor CSS3. jQuery pode passar diretamente o seletor para querySelectorAll
se for suportado ...
.not
e menos legível. Eu deveria ter dito ": não seletor em jQuery"
:not()
. Este seletor também não é novo no Seletor 4, nem foi alterado para permitir cotações. No entanto, ele foi alterado para permitir seletores mais complexos. A menos que eu não tenha entendido seu comentário ...
querySelectorAll
como o mais rápido. Não é um benchmark do mundo real, mas é esperado visto que não há sobrecarga do jQuery interno. :not()
é de fato mais rápido, provavelmente porque Sizzle sabe que pode otimizá-lo para usoquerySelectorAll()
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
Você poderia simplesmente fazer isso à moda antiga. Não há necessidade de jQuery com algo tão simples.
Dicas profissionais:
Um conjunto de elementos dom é apenas um array, então use seu toArray
método favorito em a NodeList
.
Adicionar elementos a um conjunto é apenas
set.push.apply(set, arrOfElements);
Remover um elemento de um conjunto é
set.splice(set.indexOf(el), 1)
Você não pode remover facilmente vários elementos de uma vez :(
.querySelector()
ou .querySelectorAll()
com div:not(#myid)
seja mais rápido ... É?
$("div:not(#myid)")
ou
$("div").not("#myid")
são as principais formas de selecionar todos, exceto um id
Você pode ver a demonstração aqui
$("div:not(#myid)")
seja mais rápido ... Verifique a otimização do sizzlejs para ele, ao usar Javascript nativo .querySelector()
ou .querySelectorAll()
.
Isso deve resolver:
$('div:not("#myid")')