2015-10-02 19 views
5

Non riesco a capire perché non riesco a ottenere elementi da un HtmlCollection. Questo esempio di codice:Come ottieni elementi da un javascript HTMLCollection

var col = (document.getElementsByClassName("jcrop-holder")); 
console.log(col); 

produce questo output su console:

enter image description here

sto cercando di ottenere l'oggetto dic.jcrop titolare, ma non posso ottenere dal mio col variabile. Niente di tutto questo funziona:

console.log(col[0]); // undefined 
    console.log(col.item(0)); // null 

    // check length of collection 

    console.log(col.length); // 0 

Quindi, se la lunghezza è 0 Perché il console mostrano una lunghezza di 1, così come gli oggetti dentro? Quando apro il nodo contiene bambini. Cosa sta succedendo?

Ecco alcuni nodi espansi. Non ho espanso div.jcrop.holder perché è troppo lungo. Qui ci sono gli elementi per bambini:

enter image description here

+1

Prova 'document.getElementsByClassName (" jcrop-holder ") [0]' e 'document.querySelector (". jcrop-holder ")' – Tushar

+0

Dovresti mostrarci il tuo codice completo (o almeno la parte che usi 'console.log' e quella in cui provi ad usarlo. stai cambiando quella classe tra il momento in cui accedi alla console e il tempo che stai cercando di usarlo. – Buzinas

+0

'getElementsByClassName' restituisce una _live collection_. Il piccolo 'blu' nella console indica che l'array verrà valutato _quando lo si espande_. C'è chiaramente qualcosa tra il recupero della collezione e 'console.log'ne le proprietà, e in effetti si ispeziona la raccolta nella console. –

risposta

0

stavo affrontando lo stesso problema e la soluzione a questo problema è stato quello di mettere il mio script alla fine del documento, al fine di attendere per l'intero documento da caricare prima di inizia a modificare o selezionare gli elementi HTMLCollection. Spero che aiuti.

2

Tratto da: Can't access the value of HTMLCollection

Il problema è che hanno posto lo script nell'intestazione che viene eseguito prima che gli elementi HTML vengono caricati, in modo getElementsByClassName() non restituirà alcun elemento.

Una soluzione è quella di aspettare che gli elementi HTML da caricare poi eseguire lo script, per questo si può utilizzare la finestra oggetti evento carico

window.addEventListener('load', function() { 
var eles = document.getElementsByClassName('review'); 
console.log(eles); 
console.log(eles.length); 
console.log(eles[0]); 
}) 

Oppure è possibile inserire lo script in fondo del corpo elemento invece che in testa in modo che prima che lo script venga analizzato ed eseguito gli elementi siano caricati nella dom

Problemi correlati