Estou tentando fazer um loop sobre TODOS os elementos em uma página, então quero verificar todos os elementos que existem nesta página para uma classe especial.
Então, como digo que quero verificar TODOS os elementos?
javascript
dom
Florian Müller
fonte
fonte
document.body.getElementsByTagName('*')
for (... of ...) { }
Respostas:
Você pode passar um
*
paragetElementsByTagName()
para que ele retorne todos os elementos em uma página:Observe que você pode usar
querySelectorAll()
, se estiver disponível (IE9 +, CSS no IE8), apenas encontrar elementos com uma classe específica.Isso certamente agilizaria os navegadores modernos.
Os navegadores agora suportam foreach no NodeList . Isso significa que você pode fazer um loop direto dos elementos em vez de escrever seu próprio loop for.
fonte
all[i]
daria o elemento atual.getElementsByClassName()
tem um suporte pior do quequerySelectorAll()
(o primeiro não é suportado no IE 8). O OP afirmou claramente que ele deseja repetir todos os elementos de uma página, para os quais eu dei a solução e ofereci uma alternativa. Não sei ao certo qual é o problema ;-).Estava procurando o mesmo. Bem, não exatamente. Eu só queria listar todos os nós do DOM.
Para obter elementos com uma classe específica, podemos usar a função de filtro.
Solução encontrada no MDN
fonte
document.body.getElementsByTagName('*')
poderiam retornar os nós em ordem codificada.Como sempre, a melhor solução é usar a recursão:
Diferente de outras sugestões, esta solução não exige que você crie uma matriz para todos os nós, portanto, fica mais claro na memória. Mais importante, ele encontra mais resultados. Não sei ao certo quais são esses resultados, mas ao testar no chrome, ele encontra cerca de 50% mais nós em comparação com o
document.getElementsByTagName("*");
fonte
document.getElementsByTagName("*");
” - sim, encontrará nós de texto e nós de comentários, bem como nós de elementos . Como o OP estava apenas perguntando sobre elementos, isso é desnecessário.NodeList
é simplesmente fazer referência aosNode
s que já foram criados no seu DOM, portanto não é tão pesado quanto você imagina. Alguém que sabe mais pode pesar, mas acho que é apenas um tamanho de referência de memória, portanto, 8 bytes por nó.Aqui está outro exemplo de como você pode percorrer um documento ou elemento:
fonte
Para quem está usando o Jquery
fonte
Andy E. deu uma boa resposta.
Eu acrescentaria que, se você selecionar todos os filhos em algum seletor especial (essa necessidade aconteceu recentemente), você poderá aplicar o método "getElementsByTagName ()" em qualquer objeto DOM que desejar.
Por exemplo, eu precisava apenas analisar parte "visual" da página da Web, então fiz isso
Isso nunca levará em consideração a parte principal.
fonte
a partir deste link
javascript reference
UPDATE: EDIT
desde a minha última resposta, encontrei uma solução melhor e mais simples
fonte
document.all
é desencorajado em favor dedocument.getElementBy*
.Usar
*
fonte
eu acho que isso é muito rápido
fonte
A obtenção de todos os elementos
var all = document.getElementsByTagName("*"); for (var i=0, max=all.length; i < max; i++);
está ok se você precisar verificar todos os elementos, mas resultará na verificação ou loop de elementos ou texto repetidos.Abaixo está uma implementação de recursão que verifica ou faz um loop em cada elemento de todos os elementos DOM apenas uma vez e acrescenta:
(Créditos a @George Reith por sua resposta de recursão aqui: Mapear HTML para JSON )
fonte
Você pode tentar com
document.getElementsByClassName('special_class');
fonte
getElementsByClassName()
e não é suportado pelo Internet Explorer até a versão 9.