Câu trả lời hiện được chấp nhận là sai về innerHTML
việc chậm hơn (ít nhất là trong IE và Chrome), như m93a đã đề cập chính xác.
Chrome và FF nhanh hơn đáng kể khi sử dụng phương pháp này (sẽ phá hủy dữ liệu jquery đính kèm):
var cNode = node.cloneNode(false);
node.parentNode.replaceChild(cNode, node);
trong một giây xa cho FF và Chrome và nhanh nhất trong IE:
node.innerHTML = '';
InternalHTML sẽ không phá hủy trình xử lý sự kiện của bạn hoặc ngắt các tham chiếu jquery , nó cũng được đề xuất như một giải pháp tại đây:
https://developer.mozilla.org/en-US/docs/Web/API/Euity.innerHTML .
Phương thức thao tác DOM nhanh nhất (vẫn chậm hơn hai lần trước) là loại bỏ Phạm vi, nhưng phạm vi không được hỗ trợ cho đến IE9.
var range = document.createRange();
range.selectNodeContents(node);
range.deleteContents();
Các phương thức khác được đề cập có vẻ tương đương, nhưng chậm hơn rất nhiều so với InternalHTML, ngoại trừ jquery (1.1.1 và 3.1.1) ngoại lệ, chậm hơn đáng kể so với mọi thứ khác:
$(node).empty();
Bằng chứng ở đây:
http://jsperf.com/innerhtml-vs-removechild/167 http://jsperf.com/innerhtml-vs-removechild/300
https://jsperf.com/remove-all-child-elements-of-a- dom-node-in-javascript
(url mới để khởi động lại jsperf vì chỉnh sửa url cũ không hoạt động)
"Mỗi vòng kiểm tra" của Jsperf thường được hiểu là "mỗi lần lặp" và chỉ lần lặp đầu tiên có các nút để loại bỏ nên kết quả là vô nghĩa, tại thời điểm đăng bài có các bài kiểm tra trong luồng này được thiết lập không chính xác.