Okay, ich habe mich vorher mit JavaScript beschäftigt, aber das Nützlichste, was ich geschrieben habe, ist ein CSS-Style-Switcher. Ich bin also etwas neu in diesem Bereich. Angenommen, ich habe einen HTML-Code wie diesen:
<div id="foo">
<div class="bar">
Hello world!
</div>
</div>
Wie würde ich "Hallo Welt!" zu "Auf Wiedersehen Welt!" ? Ich weiß, wie document.getElementByClass und document.getElementById funktionieren, möchte jedoch genauere Angaben machen. Entschuldigung, wenn dies vorher gefragt wurde.
Nun, zuerst müssen Sie die Elemente mit einer Funktion wie getElementById
auswählen.
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0];
getElementById
gibt nur einen Knoten zurück, aber getElementsByClassName
gibt eine Knotenliste zurück. Da es nur ein Element mit diesem Klassennamen gibt (soweit ich das beurteilen kann), können Sie einfach das erste abrufen (dafür ist das [0]
- es ist wie ein Array).
Dann können Sie den HTML-Code mit .textContent
Ändern.
targetDiv.textContent = "Goodbye world!";
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0];
targetDiv.textContent = "Goodbye world!";
<div id="foo">
<div class="bar">
Hello world!
</div>
</div>
Du kannst es so machen:
var list = document.getElementById("foo").getElementsByClassName("bar");
if (list && list.length > 0) {
list[0].innerHTML = "Goodbye world!";
}
oder, wenn Sie es mit weniger Fehlerprüfung und mehr Kürze tun möchten, können Sie es in einer Zeile wie folgt tun:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
Zur Erklärung:
id="foo"
.class="bar"
.innerHTML
dieses Elements festlegen, um dessen Inhalt zu ändern.Vorsichtsmaßnahmen: Einige ältere Browser unterstützen getElementsByClassName
nicht (z. B. ältere Versionen von IE). Diese Funktion kann eingeblendet werden, wenn sie fehlt.
Hier empfehle ich die Verwendung einer Bibliothek mit integrierter CSS3-Selektorunterstützung, anstatt sich selbst um die Browserkompatibilität zu kümmern (überlassen Sie es anderen, die ganze Arbeit zu erledigen). Wenn Sie möchten, dass nur eine Bibliothek das tut, dann wird Sizzle großartig funktionieren. In Sizzle würde dies folgendermaßen erfolgen:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
in jQuery ist die Sizzle-Bibliothek integriert. In jQuery wäre dies:
$("#foo .bar").html("Goodbye world!");
Wenn dies in IE 7 oder niedriger funktionieren soll, müssen Sie beachten, dass getElementsByClassName nicht in allen Browsern vorhanden ist. Aus diesem Grund können Sie Ihr eigenes getElementsByClassName erstellen oder dies versuchen.
var fooDiv = document.getElementById("foo");
for (var i = 0, childNode; i <= fooDiv.childNodes.length; i ++) {
childNode = fooDiv.childNodes[i];
if (/bar/.test(childNode.className)) {
childNode.innerHTML = "Goodbye world!";
}
}
Rekursive Funktion:
function getElementInsideElement(baseElement, wantedElementID) {
var elementToReturn;
for (var i = 0; i < baseElement.childNodes.length; i++) {
elementToReturn = baseElement.childNodes[i];
if (elementToReturn.id == wantedElementID) {
return elementToReturn;
} else {
return getElementInsideElement(elementToReturn, wantedElementID);
}
}
}
Der einfachste Weg dies zu tun ist:
function findChild(idOfElement, idOfChild){
let element = document.getElementById(idOfElement);
return element.querySelector('[id=' + idOfChild + ']');
}
oder besser lesbar:
findChild = (idOfElement, idOfChild) => {
let element = document.getElementById(idOfElement);
return element.querySelector(`[id=${idOfChild}]`);
}