2010-07-28 33 views
12

Tôi có HTML như sau:Sử dụng JavaScript insertBefore() để chèn trước một TextNode?

<div id="move-me"> 
    <a href="#">I'm a link</a> 
</div> 

<div id="new-parent"> 
    Some plain text. 
</div> 

Tôi đang cố gắng để viết mã JavaScript mà sẽ di chuyển toàn bộ # chuyển-me div bên trong div # mới phụ huynh, trên văn bản, như vậy:

<div id="new-parent"> 
    <div id="move-me"> 
     <a href="#">I'm a link</a> 
    </div> 
    Some plain text. 
</div> 

đây là Javascript tôi có:

function moveDiv() { 
    var moveable = document.getElementById('move-me'); 
    var newParent = document.getElementById('new-parent'); 
    newParent.parentNode.insertBefore(moveable, newParent.firstChild); 
} 

tôi đang sử dụng Firebug để gỡ lỗi, và tôi có thể thấy rằng newParent.firstChild là một TextNode, nhưng tôi luôn luôn nhận được lỗi sau:

Node was not found" code: "8 
newParent.parentNode.insertBefore(moveable, newParent.firstChild); 

Nó có vẻ như insertBefore đòi hỏi một nút phần tử và sẽ không hoạt động trên một nút văn bản ... không biết có đúng? Nếu vậy, có phương pháp tốt nào khác để làm điều này không?

Lưu ý: Tôi không thể sửa đổi hoặc xóa HTML để bao gồm thẻ đoạn hoặc xóa khoảng trắng.

Trả lời

13

Không, insertBefore sẽ hoạt động tốt với nút văn bản làm nút được chèn trước đó. Vấn đề là nút bạn đang cố gắng chèn trước không phải là nút con của nút mà bạn đang chèn vào. Bạn cần xóa số .parentNode bit:

newParent.insertBefore(moveable, newParent.firstChild); 
+0

Cảm ơn bạn, cảm ơn bạn. Lời giải thích của bạn sẽ giúp ích rất nhiều; Tôi cũng đã trộn lẫn lên appendChild, tôi nghĩ vậy. –

+0

Tôi thấy - insertBefore phải được gọi trên nút chứa/nút cha có chứa nút mà tôi muốn chèn trước đó. – kermit

2

Bạn cần xóa ".parentNode" khỏi câu lệnh chèn. Một nút văn bản vẫn là một nút và có thể được tham chiếu như mọi nút khác.

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