2009-05-15 13 views

Trả lời

34

vì Firefox xem xét khoảng trắng giữa các nút phần tử thành nút văn bản (trong khi IE không) và do đó sử dụng .nextSibling trên một phần tử nhận nút văn bản đó trong Firefox.

Sẽ hữu ích khi có chức năng sử dụng để nhận nút phần tử tiếp theo. Một cái gì đó như thế này

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

sau đó bạn có thể làm

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

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

Nhưng 'elem' vẫn có thể là null. – Gumbo

+0

Không, không. Nó chỉ guaratees rằng 'nextSibling' không được truy cập khi' elem' là “không đúng” hoặc “elem.nodeType == 1'. Nhưng nếu không có một yếu tố như vậy, 'elem' chỉ là nút anh chị em cuối cùng bất kể loại đó là gì. – Gumbo

+0

Dưới đây là ví dụ: var elem = document.createElement ("div"); elem.appendChild (document.createTextNode ("foo")); elem.appendChild (document.createTextNode ("bar")); cảnh báo (tiếp theo (elem.firstChild) === null); // "true" – Gumbo

2

lỗi Firebug là elem.nextSibling.style là undefined.

vì nextSibling có thể là một văn bản nút hoặc loại nút khác

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

+1 Để kiểm tra nếu 'elem' không phải là null trước khi truy cập thuộc tính' style'. – Gumbo

0

Hãy thử Looping qua trẻ em của nguyên tố này bằng một cái gì đó như:

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

Hãy điều chỉnh phù hợp với cú pháp.

8

Hãy xem Element Traversal API, API đó chỉ di chuyển giữa các nút Phần tử. Điều này cho phép như sau:

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

Và do đó tránh được vấn đề cố hữu trong nextSibling của khả năng nhận được các nút phi tử (ví dụ TextNode khoảng trắng giữ)

+0

TY TY TY TY để thêm câu trả lời này! – Alisso

+0

tôi nghĩ đây là cách tốt nhất và dễ nhất mà tôi không hiểu tại sao mọi người không tập trung .. –