2009-05-15 12 views

Odpowiedz

34

dzieje się tak dlatego, że Firefox uznaje białe znaki między węzłami elementów za węzły tekstowe (podczas gdy IE nie), a zatem użycie .nextSibling na elemencie pobiera ten węzeł tekstowy w Firefoksie.

Przydaje się funkcja, której można użyć do uzyskania następnego węzła elementu. Coś takiego

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

wtedy można zrobić

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

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

Ale 'elem' nadal może być null. – Gumbo

+0

Nie, nie ma. Gwarantuje tylko, że 'nextSibling' nie jest dostępny, gdy' elem' jest "nieprawdziwe" lub 'elem.nodeType == 1'. Ale jeśli nie ma takiego elementu, 'elem' jest tylko ostatnim węzłem rodzeństwa, niezależnie od tego, jaki jest. – Gumbo

+0

Oto przykład: var elem = document.createElement ("div"); elem.appendChild (document.createTextNode ("foo")); elem.appendChild (document.createTextNode ("bar")); alert (next (elem.firstChild) === null); // "true" – Gumbo

2

błąd Firebug był elem.nextSibling.style jest niezdefiniowany.

ponieważ nextSibling może być tekst węzła lub inny typ węzła

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

+1 Sprawdzanie, czy 'elem' nie ma wartości NULL przed uzyskaniem dostępu do atrybutu' style'. – Gumbo

0

Spróbuj zapętlenie przez dzieci tego elementu przy użyciu coś jak:

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

Należy dokonać odpowiednich korekt do składnia.

8

Spójrz na Element Traversal API, że API porusza się tylko między węzłami elementu. Pozwala to następujące:

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

I w ten sposób unika się problemu wrodzoną w nextSibling potencjalnie coraz węzły non-element (np TextNode gospodarstwa spacje)

+0

TY TY TY TY dla dodania tej odpowiedzi! – Alisso

+0

Myślę, że jest to najlepszy i najprostszy sposób, nie rozumiem, dlaczego ludzie nie koncentrują się .. –