Ik schrijf een scriptextensie voor Chrome-inhoud en ik moet een specifiek element kunnen targeten dat helaas geen unieke ID’s heeft, behalve het bovenliggende element.
Ik moet het directe eerste onderliggende element van parentElement
targeten. console.log(parentElement)
rapporteert perfect beide onderliggende elementen/nodes, maar de volgende consolelogs (degene die gericht zijn op de childNodes) retourneren altijd een undefined
waarde, ongeacht wat ik doe.
Dit is mijn code tot nu toe
(Ik heb de echte namen weggelaten om verwarring en extra, onnodige uitleg te voorkomen)
function injectCode() {
var parentElement = document.getElementsByClassName("uniqueClassName");
if (parentElement && parentElement.innerHTML != "") {
console.log(parentElement);
console.log(parentElement.firstElementChild);
console.log(parentElement.firstChild);
console.log(parentElement.childNodes);
console.log(parentElement.childNodes[0]);
console.log(parentElement.childNodes[1]);
} else {
setTimeout(injectCode, 250);
}
}
Hoe selecteer ik het eerste onderliggende element/knooppunt van parentElement
?
Bijwerken:
parentElement.children[0]
heeft ook dezelfde fout als parentElement.childNodes[0]
.
Antwoord 1, autoriteit 100%
Beide geven je het eerste onderliggende knooppunt:
console.log(parentElement.firstChild); // or
console.log(parentElement.childNodes[0]);
Als je het eerste onderliggende element nodig hebt dat een elementknooppunt is, gebruik dan:
console.log(parentElement.children[0]);
Bewerken
Ah, ik begrijp je probleem nu; parentElement
is een array.
Als u weet dat getElementsByClassNameslechts één resultaat zal opleveren, wat zo lijkt als je dat doet, zou je [0]
moeten gebruiken om het element te verdrijven (ja, ik heb dat woord verzonnen):
var parentElement = document.getElementsByClassName("uniqueClassName")[0];