Znalazłem się w użyciu JavaScript i natknąłem się na childNodes
i children
właściwości. Zastanawiam się, jaka jest różnica między nimi. Czy też jeden jest lepszy od drugiego?
źródło
Znalazłem się w użyciu JavaScript i natknąłem się na childNodes
i children
właściwości. Zastanawiam się, jaka jest różnica między nimi. Czy też jeden jest lepszy od drugiego?
Zrozum, że .children
jest to właściwość elementu . 1 Tylko elementy mają .children
, a wszystkie te elementy potomne są typu elementu. 2)
Jednak .childNodes
jest własnością węzła . .childNodes
może zawierać dowolny węzeł. 3)
Konkretnym przykładem byłoby:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
.children
Przez większość czasu chcesz używać, ponieważ generalnie nie chcesz zapętlać węzłów Tekst lub Komentarz podczas manipulacji DOM.
Jeśli chcesz manipulować węzłami tekstowymi, prawdopodobnie .textContent
zamiast tego chcesz . 4
1. Z technicznego punktu widzenia jest to atrybut ParentNode , miksu zawartego w elemencie.
2. Wszystkie są elementami, ponieważ .children
jest to kolekcja HTMLC , która może zawierać tylko elementy.
3. Podobnie .childNodes
może pomieścić dowolny węzeł, ponieważ jest to lista NodeList .
4. Or .innerText
. Zobacz różnice tutaj lub tutaj .
.children
dokumentów XML : jsfiddle.net/fbwbjvch/1Element.children
zwraca tylko elementy potomne elementu , aNode.childNodes
zwraca wszystkie elementy potomne węzła . Zauważ, że elementy są węzłami, więc oba są dostępne na elementach.Wierzę, że
childNodes
jest bardziej niezawodny. Na przykład MDC (link powyżej) zauważa, że IE machildren
rację tylko w IE 9.childNodes
zapewnia mniej miejsca na błędy dla implementatorów przeglądarki.źródło
.children
nie odfiltrowuje węzłów komentarzy, ale odfiltrowuje węzły tekstowe..getElementsByTagName('*')
. Czasami IE może być tak denerwujące ...children
tego wsparcia IE.Dobre odpowiedzi do tej pory, chcę tylko dodać, że można sprawdzić typ węzła za pomocą
nodeType
:yourElement.nodeType
To da ci liczbę całkowitą: (wzięte stąd )
Zauważ, że według Mozilli :
źródło
Wybierz jeden zależy od metody, której szukasz !?
Pójdę z ParentNode.children :
Ponieważ zapewnia
namedItem
metodę, która pozwala mi bezpośrednio uzyskać jeden z elementów potomnych bez zapętlania wszystkich dzieci lub unikania używaniagetElementById
itp.na przykład
Pójdę z Node.childNodes :
Ponieważ zapewnia
forEach
metodę, gdy pracuję zwindow.IntersectionObserver
npźródło