2009-05-15 20 views

Respuesta

34

es porque Firefox considera que los espacios en blanco entre los nodos de elementos son nodos de texto (mientras que IE no) y por lo tanto usando .nextSibling en un elemento obtiene ese nodo de texto en Firefox.

Es útil tener una función para usar para obtener el siguiente nodo de elemento. Algo como esto

/* 
    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;   
} 

entonces usted puede hacer

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

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

Pero 'elem' aún podría ser nulo. – Gumbo

+0

No, no lo hace. Simplemente garantiza que 'nextSibling' no se accede cuando' elem' es "no verdadero" o 'elem.nodeType == 1'. Pero si no hay tal elemento, 'elem' es solo el último nodo hermano, independientemente de qué tipo sea. – Gumbo

+0

Aquí hay un ejemplo: var elem = document.createElement ("div"); elem.appendChild (document.createTextNode ("foo")); elem.appendChild (document.createTextNode ("barra")); Alerta (siguiente (elem.firstChild) === null); // "verdadero" – Gumbo

2

error Firebug era elem.nextSibling.style no está definido.

porque nextSibling puede ser un texto nodos u otro tipo de nodo

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

+1 Para comprobar si 'elem' no es nulo antes de acceder al atributo' style'. – Gumbo

0

Trate bucle a través de los hijos de este elemento usando algo como:

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

Por favor haga las correcciones pertinentes a la sintaxis.

8

Eche un vistazo a Element Traversal API, esa API se mueve solo entre los nodos Element. Esto permite lo siguiente:

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

Y así se evita el problema inherente a nextSibling de conseguir potencialmente nodos que no son de elemento (por ejemplo textNode espacios en blanco sosteniendo)

+0

TY TY TY TY para agregar esta respuesta! – Alisso

+0

Creo que esta es la mejor y más fácil manera de no entender por qué la gente no se centró .. –

Cuestiones relacionadas