Znajdowanie elementu potomnego w czystym javascript


142

Jaka byłaby najskuteczniejsza metoda znalezienia elementu potomnego (z klasą lub identyfikatorem) określonego elementu nadrzędnego przy użyciu wyłącznie czystego javascript. Brak jQuery ani innych frameworków.

W takim przypadku musiałbym znaleźć child1 lub child2 of parent , zakładając, że drzewo DOM może mieć wiele elementów klasy child1 lub child2 w drzewie. Chcę tylko elementów rodzica

    <div class="parent">
        <div class="child1">
            <div class="child2">
            </div>
        </div>
    </div>


1
ID byłoby najłatwiejszym sposobem. Muszą być wyjątkowe, więc możesz to zrobić document.getElementById('element-id').
Felix Kling

1
Używaj zwykłych zapytań dom, a następnie: przeczytaj ten najlepszy sposób, aby uzyskać węzły potomne
Elias Van Ootegem

Odpowiedzi:


152

childrenWłaściwość zwraca szereg elementów, takich jak sposób:

parent = document.querySelector('.parent');
children = parent.children; // [<div class="child1">]

Istnieją alternatywy querySelector, na przykład, document.getElementsByClassName('parent')[0]jeśli chcesz.


Edycja: Teraz, kiedy o tym myślę, możesz po prostu użyć querySelectorAlldo uzyskania przyzwoitości parentposiadania nazwy klasy child1:

children = document.querySelectorAll('.parent .child1');

Różnica między qS i qSA polega na tym, że ta ostatnia zwraca wszystkie elementy pasujące do selektora, podczas gdy ta pierwsza zwraca tylko pierwszy taki element.


182

Jeśli już masz, var parent = document.querySelector('.parent');możesz to zrobić, aby zawęzić wyszukiwanie do parentdzieci:

parent.querySelector('.child')

1
Możesz także parent.querySelectorAll('.child')zwrócić NodeList
schmijos

19

Po prostu dodając kolejny pomysł, możesz użyć selektora podrzędnego, aby uzyskać bezpośrednie dzieci

document.querySelectorAll(".parent > .child1");

powinien zwrócić wszystkie bezpośrednie dzieci z klasą .child1


Widziałem, jak wszyscy sugerowali querySelector niż getElementBy **. Czy to jest bardziej wydajne?
Andre


2

Masz element nadrzędny, chcesz pobrać całe dziecko określonego atrybutu 1. pobierz rodzica 2. uzyskaj nazwę węzła nadrzędnego, używając parent.nodeName.toLowerCase()konwersji nazwy węzła na małe litery np. DIV będzie div 3. w innym celu uzyskaj atrybut rodzic np parent.getAttribute("id"). to ci daid rodzica 4. Następnie użyj, document.QuerySelectorAll(paret.nodeName.toLowerCase()+"#"_parent.getAttribute("id")+" input " ); jeśli chcesz wprowadzić dzieci węzła nadrzędnego

let parent = document.querySelector("div.classnameofthediv")
let parent_node = parent.nodeName.toLowerCase()
let parent_clas_arr = parent.getAttribute("class").split(" ");
let parent_clas_str = '';
  parent_clas_arr.forEach(e=>{
     parent_clas_str +=e+'.';
  })
let parent_class_name = parent_clas_str.substr(0, parent_clas_str.length-1)  //remove the last dot
let allchild = document.querySelectorAll(parent_node+"."+parent_class_name+" input")

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.