Eu encontrei-me usando JavaScript e eu corri em toda childNodes
e children
propriedades. Eu estou querendo saber qual é a diferença entre eles. Também é um preferido para o outro?
fonte
Eu encontrei-me usando JavaScript e eu corri em toda childNodes
e children
propriedades. Eu estou querendo saber qual é a diferença entre eles. Também é um preferido para o outro?
Entenda que .children
é uma propriedade de um elemento . 1 Somente Elements possuem .children
, e esses filhos são do tipo Element. 2
No entanto, .childNodes
é uma propriedade do Node . .childNodes
pode conter qualquer nó. 3
Um exemplo concreto seria:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
Na maioria das vezes, você deseja usar .children
porque geralmente não deseja fazer um loop sobre nós de texto ou comentário na manipulação do DOM.
Se você deseja manipular nós de texto, provavelmente deseja .textContent
. 4
1. Tecnicamente, é um atributo do ParentNode , um mixin incluído pelo Element.
2. Eles são todos elementos porque .children
é um HTMLCollection , que pode conter apenas elementos.
3. Da mesma forma, .childNodes
pode conter qualquer nó porque é um NodeList .
4. Or .innerText
. Veja as diferenças aqui ou aqui .
.children
em documentos XML : jsfiddle.net/fbwbjvch/1Element.children
retorna apenas filhos do elemento , enquantoNode.childNodes
retorna todos os filhos do nó . Observe que os elementos são nós, portanto, ambos estão disponíveis nos elementos.Eu acredito que
childNodes
é mais confiável. Por exemplo, o MDC (vinculado acima) observa que o IE só acertouchildren
no IE 9.childNodes
fornece menos espaço para erros por implementadores de navegador.fonte
.children
, não filtra nós de comentários, mas filtra nós de texto..getElementsByTagName('*')
. IE pode ser tão irritante às vezes ...children
desse suporte ao IE.Boas respostas até agora, quero apenas acrescentar que você pode verificar o tipo de um nó usando
nodeType
:yourElement.nodeType
Isso fornecerá um número inteiro: (extraído daqui )
Observe que, de acordo com o Mozilla :
fonte
Escolha um depende do método que você está procurando !?
Eu irei com ParentNode.children :
Como ele fornece um
namedItem
método que me permite obter diretamente um dos elementos filhos sem repetir todos os filhos ou evitar o usogetElementById
etc.por exemplo
Eu irei com Node.childNodes :
Como ele fornece
forEach
método quando eu trabalho com,window.IntersectionObserver
por exemplo,fonte