Chức năng removeChild
có thực sự xóa nút con hoàn toàn không? Hoặc nó chỉ loại bỏ phần tử là con của nút parant được chỉ định? Nếu nó không thực sự xóa phần tử, có cách nào để xóa hoàn toàn phần tử không?Có removeChild thực sự xóa phần tử không?
Trả lời
Phương thức removeChild
chỉ đơn giản là xóa nó khỏi cha mẹ của nó. Nếu đó là phần tử hiển thị của trang, phần tử đó sẽ bị xóa khỏi trang.
Nhưng Javascript có bộ sưu tập rác. Điều này có nghĩa là chính đối tượng nút sẽ vẫn tồn tại miễn là bất kỳ biến nào đề cập đến nó. Vì vậy, bạn có thể gán một nút cho một biến, sử dụng removeChild
để 'prune' nó từ nút cha của nó, và sau này, chèn hoặc nối nó vào một số nút khác, do đó có hiệu quả di chuyển nó xung quanh trên trang.
Các mã sau đây sẽ loại bỏ một nút, và chờ 10 giây trước khi tái thêm nó vào cây (và do đó, để trang):
var oldNode = someNode.removeChild(...);
setTimeout(function() {
document.documentElement.appendChild(oldNode);
}, 10000);
Điều này có nghĩa rằng đối tượng nút vẫn chưa được bị xóa khỏi bộ nhớ, bởi vì vẫn còn một biến trỏ đến nó (cụ thể là, oldNode
).
Một trường hợp khác:
var node = document.getElementById('test');
// ... do stuff
node.parentElement.removeChild(node);
// 'node' still exists, but has been removed from the page
// ... do some more stuff
node = document.getElementById('hello');
// The variable 'node' now points to something else;
// this means the original node will be deleted from memory
Nếu, mặt khác, bạn không gán nút gỡ bỏ để biến khác, nó không thể được truy cập nữa (không thông qua cây tài liệu, kể từ nó đã bị xóa khỏi đó, và không phải thông qua biến JS); nên javascript sẽ tự động tẩy nó từ bộ nhớ:
someNode.removeChild(...);
Gán nút gỡ bỏ cho một biến, và sau đó gán null
(hoặc bất cứ điều gì khác) để biến đó - như Marc B gợi ý trong câu trả lời của ông - là hoàn toàn không cần thiết và, IMHO, ngớ ngẩn.
removeChild xóa phần tử khỏi dom, nhưng nó cũng được trả lại từ hàm trong trường hợp bạn đang thực hiện việc xóa để chèn lại nó ở nơi khác. Bạn sẽ phải giết mà giá trị trả về để thực sự thoát khỏi nút loại bỏ:
oldNode = someNode.removeChild(...);
oldNode = null;
này hoàn toàn sẽ xóa các nút:
someNode.removeChild(...);
này sẽ loại bỏ các nút từ DOM vì vậy nó không hiển thị nhưng sẽ lưu nó để bạn có thể chèn nó ở nơi khác:
oldNode = someNode.removeChild(...);
Ví dụ đầu tiên là chính xác, nhưng tôi đã có một tình huống mà nó dường như không hoạt động, ví dụ:'var aChild = document.createElement (...); someNode.appendChild (aChild); ... someNode.removeChild (aChild); Nút vẫn còn do tham chiếu biến aChild. Trong trường hợp đó, bạn cần phải 'xóa aChild' để hoàn thành công việc. – CyberFonic
Từ ngữ cảnh khác (nơi bạn có thể không biết liệu có các tham chiếu khác tới nút đã xóa) hay không, bạn có thể kiểm tra xem trạng thái mà nút đã xóa nằm trong 'node.parentElement == null' –
. các tham chiếu khác tới nút. Có nghĩa là nếu nút được tham chiếu ở nơi khác 'removeChild' sẽ không xóa hoàn toàn nút đó. –
Nếu bạn thực sự muốn xóa phần tử dom. removeChild một mình là không đủ. Đây là theo Steve Sounders, tác giả của YSlow. Bạn cần phải sử dụng xóa
- 1. jQuery ::: Xóa có thực sự xóa không?
- 2. Javascript có xóa trình xử lý sự kiện của các phần tử DOM đã xóa không?
- 3. Tôi có cần hủy liên kết sự kiện jquery trước khi xóa phần tử không?
- 4. Xóa phần tử không có trong danh sách
- 5. PHP - Xóa phần tử XML
- 6. Tại sao removeChild cần một nút cha?
- 7. Xóa phần đệm cho phần tử trống
- 8. jQueryUI: xóa đúng phần tử có thể kéo
- 9. Tôi có cần tách các sự kiện trong jQuery khi tôi xóa các phần tử
- 10. Cách sao chép một phần tử có dữ liệu không có sự kiện với JQuery
- 11. Không có gì thực sự bị xóa trong git?
- 12. Làm thế nào để xóa phần tử dat.GUI?
- 13. Nếu bạn xóa phần tử DOM, mọi sự kiện bắt đầu với phần tử đó có tiếp tục bong bóng không?
- 14. Python: xóa phần tử khỏi heap
- 15. Xóa các phần tử khỏi mảng Ruby
- 16. IE không thực sự xóa các cookie
- 17. Xóa tất cả trình nghe sự kiện JavaScript của một phần tử và các phần tử con của nó?
- 18. Xóa phần tử khỏi phần giữa của tiêu chuẩn :: heap
- 19. Xóa hai phần tử trong một dòng
- 20. Cách xóa phần tử khỏi IGrouping
- 21. cách xóa mọi kiểu khỏi phần tử?
- 22. Cách xóa phần tử gốc trong C#/
- 23. Xóa phần tử null khỏi mảng mongo
- 24. Xóa phần tử từ json bằng php
- 25. Xóa các phần tử khỏi một vector
- 26. Xóa phần tử khỏi danh sách chung
- 27. Cách xóa phần tử xml khỏi tệp?
- 28. Có thực sự không có cách nào để lộ nguyên mẫu của một phần tử html trong IE (<8)?
- 29. emacs lisp: Cách xóa/xóa phần tử của danh sách?
- 30. Việc xóa phần tử tập lệnh có xóa các chức năng của nó khỏi bộ nhớ không?
Oh cảm ơn bạn :) –
Sẽ không đơn giản là không gán giá trị trả lại cho bất kỳ thứ gì có cùng tác dụng? – awm
Null của tiện lợi và làm cho nó rõ ràng bạn đang trashing giá trị. làm 'oldNode = 'xóa nút này, vui lòng';' có vẻ như là một sự lãng phí của các ký tự. –