2015-06-28 23 views

Trả lời

16

'nextSibling' trả về đối tượng nút tiếp theo trong khi 'nextElementSibling' trả về đối tượng Element tiếp theo, vì vậy có lẽ câu hỏi thực sự là sự khác biệt giữa một phần tử Node & là gì?

Về cơ bản một phần tử được chỉ định bằng thẻ HTML trong khi nút là bất kỳ đối tượng nào trong DOM, do đó phần tử là nút nhưng nút cũng có thể bao gồm các nút văn bản ở dạng khoảng trắng, nhận xét, ký tự văn bản hoặc ngắt dòng . Để biết thêm về Elements vs Nodes thấy điều này Difference between Node object and Element object?

tức Đi đoạn mã DOM sau

<div id="start"></div> 
Me 
<p>Hi</p> 

Sử dụng nextSibling bạn sẽ nhận được:

console.log(document.getElementById('start').nextSibling); // "\nMe\n" 
console.log(document.getElementById('start').nextSibling.nextSibling); // "<p> 

Trong khi sử dụng nextElementSibling bạn sẽ nhận được:

console.log(document.getElementById('start').nextElementSibling);// "<p>" 

Ngoài ra nextElementSibling là IE10 +, là Phương pháp mới trong khi nextSibling có trình duyệt hỗ trợ đầy đủ

+0

Khoảng trắng ** là ** văn bản. –

+0

câu trả lời hay ...... –

+0

Còn nhiều hơn thế nữa. Các nút có loại được lưu trữ dưới dạng thuộc tính [* nodeType *] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-111237558). Các phần tử có * nodeType * của * 1 *, có 11 phần tử khác (xem [* MDN Node.nodeType *] (https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType)). Và DOM áp dụng cho các tài liệu khác ngoài HTML. – RobG

1

nextSibling sẽ trở lại nút tiếp theo trong DOM, có lẽ hầu hết trong các tình huống trang web hiện tại, đó là một khoảng trắng nhưng nextElementSibling sẽ trở lại chỉ phần tử tiếp theo bỏ qua tất cả các nút ở giữa, nếu có.

Đối với trang hiện tại. Các nextSibling cho câu hỏi là một TextNode(Whitespace) nhưng nếu tôi muốn nhận được #answers tôi sẽ sử dụng nextElementSibling

enter image description here

enter image description here

Các vấn đề liên quan