2009-05-15 18 views

risposta

34

perché Firefox considera gli spazi tra nodi di elementi come nodi di testo (mentre IE no) e pertanto l'utilizzo di .nextSibling su un elemento ottiene quel nodo di testo in Firefox.

È utile avere una funzione da utilizzare per ottenere il nodo dell'elemento successivo. Qualcosa di simile

/* 
    Credit to John Resig for this function 
    taken from Pro JavaScript techniques 
*/ 
function next(elem) { 
    do { 
     elem = elem.nextSibling; 
    } while (elem && elem.nodeType !== 1); 
    return elem;   
} 

allora si può fare

var elem = document.getElementById('the_id'); 
var nextElem = next(elem); 

if (nextElem) 
    nextElem.style.display = 'none'; 
+0

Ma 'elem' ancora potrebbe essere nullo. – Gumbo

+0

No, non lo è. Garantisce semplicemente che 'nextSibling' non è accessibile quando' elem' è "non vero" o 'elem.nodeType == 1'. Ma se non c'è un tale elemento, 'elem' è solo l'ultimo nodo fratello indipendentemente dal tipo di esso. – Gumbo

+0

Ecco un esempio: var elem = document.createElement ("div"); elem.appendChild (document.createTextNode ("foo")); elem.appendChild (document.createTextNode ("bar")); Avviso (successivo (elem.firstChild) === null); // "true" – Gumbo

2

errore Firebug era elem.nextSibling.style non è definito.

perché nextSibling può essere un testo-nodo o altro tipo di nodo

do { 
    elem = elem.nextSibling; 
} while(element && elem.nodeType !== 1); // 1 == Node.ELEMENT_NODE 
if(elem) elem.style.display = 'none'; 
+0

+1 Per verificare se 'elem' non è null prima di accedere all'attributo' style'. – Gumbo

0

Prova scorrendo i figli di questo elemento usando qualcosa come:

var i=0; 
(foreach child in elem) 
{ 
    if (i==0) 
    { 
    document.getElementByID(child.id).style.display='none'; 
    } 
} 

Si prega di fare opportune correzioni al sintassi.

8

Dai uno sguardo allo Element Traversal API, che l'API si sposta solo tra i nodi Element. Questo permette il seguente:

elem.nextElementSibling.style.display = 'none'; 

E così evita il problema inerente nextSibling potenzialmente ottenere nodi non-Element (ad esempio TextNode spazi possesso)

+0

TY TY TY TY per aggiungere questa risposta! – Alisso

+0

penso che questo sia il modo migliore e più semplice per non capire perché la gente non si è concentrata .. –

Problemi correlati