Finden des untergeordneten Elements des übergeordneten reinen Javascript


142

Was wäre die effizienteste Methode, um ein untergeordnetes Element (mit Klasse oder ID) eines bestimmten übergeordneten Elements nur mit reinem Javascript zu finden. Keine jQuery oder andere Frameworks.

In diesem Fall müsste ich child1 oder child2 des Elternteils finden , vorausgesetzt, der DOM-Baum könnte mehrere child1- oder child2- Klassenelemente im Baum enthalten. Ich möchte nur die Elemente der Eltern

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


1
ID wäre der einfachste Weg. Sie müssen einzigartig sein, damit Sie es einfach tun können document.getElementById('element-id').
Felix Kling

1
Verwenden Sie dann reguläre Dom-Abfragen: Lesen Sie diesen besten Weg, um
untergeordnete

Antworten:


152

Die childrenEigenschaft gibt ein Array von Elementen zurück, wie folgt:

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

Es gibt Alternativen zu querySelector, document.getElementsByClassName('parent')[0]wenn Sie dies wünschen.


Bearbeiten: Jetzt, wo ich darüber nachdenke, könnten Sie nur verwenden querySelectorAll, um Nachkommen parenteines Klassennamens von child1:

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

Der Unterschied zwischen qS und qSA besteht darin, dass das letztere alle Elemente zurückgibt, die mit dem Selektor übereinstimmen, während das erstere nur das erste derartige Element zurückgibt.


182

Wenn Sie dies bereits var parent = document.querySelector('.parent');getan haben , können Sie dies tun, um die Suche auf parentdie Kinder zu beschränken:

parent.querySelector('.child')

1
Sie können auch parent.querySelectorAll('.child')eine NodeList
schmijos

19

Wenn Sie nur eine weitere Idee hinzufügen, können Sie eine Kinderauswahl verwenden, um sofort Kinder zu bekommen

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

sollte alle unmittelbaren Kinder mit der Klasse .child1 zurückgeben


Ich habe gesehen, dass jeder querySelector als getElementBy ** vorschlägt. Ist es effizienter?
Andre


2

Wenn Sie ein übergeordnetes Element haben, möchten Sie alle untergeordneten Elemente eines bestimmten Attributs abrufen. 1. Abrufen des übergeordneten Knotens 2. Abrufen des übergeordneten Knotennamens durch parent.nodeName.toLowerCase()Konvertieren des Knotennamens in Kleinbuchstaben, z. B. DIV ist div der Elternteil zB parent.getAttribute("id"). Dies gibt Ihnen idden übergeordneten 4. Dann verwenden document.QuerySelectorAll(paret.nodeName.toLowerCase()+"#"_parent.getAttribute("id")+" input " ); Sie, wenn Sie untergeordnete Knoten des übergeordneten Knotens eingeben möchten

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")

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.