2012-05-06 10 views
36

Piszę rozszerzenie skryptu treści Chrome i muszę mieć możliwość kierowania na konkretny element, który niestety nie ma unikalnych identyfikatorów oprócz elementu nadrzędnego.Uzyskaj natychmiastowy pierwszy element podrzędny

Potrzebuję kierować natychmiastowy pierwszy element podrzędny z parentElement. console.log(parentElement) raportuje oba elementy/węzły potomne w sposób perfekcyjny, ale kolejne logi konsoli (te, które są kierowane na węzły potomne) zawsze zwracają wartość undefined bez względu na to, co robię.

To jest mój kod tak daleko
(mam wyłączone rzeczywiste nazwiska, aby uniknąć nieporozumień i dodatkowej, niepotrzebnej wyjaśnienia)

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); 
    } 
} 

Jak wybrać pierwszy element dziecko/węzeł parentElement?

enter image description here

Aktualizacja:
parentElement.children[0] ma również ten sam błąd co parentElement.childNodes[0].

+2

Chcesz pierwszy węzeł podrzędny lub pierwsze dziecko ** element ** (węzeł)? –

+0

nie dopuszczaj żadnych spacji między div rodzica a dzieckiem, ale w jednej linii –

+0

childNodes [0] zwraca 'undefined' right? Zobacz moją odpowiedź na przykład poniżej. –

Odpowiedz

83

Oba te daje pierwszy węzeł dziecko:

console.log(parentElement.firstChild); // or 
console.log(parentElement.childNodes[0]); 

Jeśli potrzebujesz pierwszego dziecka, które jest węzłem elementem wtedy użyć:

console.log(parentElement.children[0]); 

Edycja

Ah, teraz widzę twój problem; parentElement to tablica.

Jeśli wiesz, że powróci tylko jeden wynik, który wydaje się to zrobić, należy użyć [0] do dearray (tak, zrobiłem to słowo w górę) elementu:

var parentElement = document.getElementsByClassName("uniqueClassName")[0]; 
+0

Wszystko wraca nieokreślone (jak widać na obrazku), a kiedy używasz '[0]' uruchamia cały skrypt. Próbowałem też '.children [0]', ale to też nie działało. :/ – mythofechelon

+0

@BenHooper Zaktualizowano moją odpowiedź, ponieważ dodałeś zrzut ekranu, zauważyłem faktyczny problem. – Paulpro

+0

Tak! To się udało! Dziękuję bardzo! : D – mythofechelon

Powiązane problemy