Trong hầu hết các trình duyệt, có một cách ngắn gọn hơn một chút để loại bỏ một phần tử khỏi DOM so với cách gọi .removeChild(element)
cha mẹ của nó, đó là chỉ gọi element.remove()
. Theo đúng tiến trình, điều này có thể sẽ trở thành cách tiêu chuẩn và thành ngữ để loại bỏ một phần tử khỏi DOM.
Các .remove()
phương pháp đã được thêm vào mức sống DOM trong năm 2011 ( cam kết ), và từ đó đã được thực hiện bởi Chrome, Firefox, Safari, Opera, và Edge. Nó không được hỗ trợ trong bất kỳ phiên bản nào của Internet Explorer.
Nếu bạn muốn hỗ trợ các trình duyệt cũ hơn, bạn sẽ cần phải bắt chước nó. Điều này hóa ra hơi khó chịu, bởi vì dường như không ai đã tạo ra một shim DOM đa năng có chứa các phương thức này và bởi vì chúng tôi không chỉ thêm phương thức vào một nguyên mẫu duy nhất; đó là một phương thức ChildNode
, chỉ là một giao diện được xác định bởi thông số kỹ thuật và không thể truy cập được bằng JavaScript, vì vậy chúng tôi không thể thêm bất cứ điều gì vào nguyên mẫu của nó. Vì vậy, chúng ta cần tìm tất cả các nguyên mẫu kế thừa ChildNode
và thực sự được xác định trong trình duyệt và thêm .remove
chúng vào.
Đây là shim tôi đã đưa ra, mà tôi đã xác nhận hoạt động trong IE 8.
(function () {
var typesToPatch = ['DocumentType', 'Element', 'CharacterData'],
remove = function () {
// The check here seems pointless, since we're not adding this
// method to the prototypes of any any elements that CAN be the
// root of the DOM. However, it's required by spec (see point 1 of
// https://dom.spec.whatwg.org/#dom-childnode-remove) and would
// theoretically make a difference if somebody .apply()ed this
// method to the DOM's root node, so let's roll with it.
if (this.parentNode != null) {
this.parentNode.removeChild(this);
}
};
for (var i=0; i<typesToPatch.length; i++) {
var type = typesToPatch[i];
if (window[type] && !window[type].prototype.remove) {
window[type].prototype.remove = remove;
}
}
})();
Điều này sẽ không hoạt động trong IE 7 hoặc thấp hơn, vì việc mở rộng các nguyên mẫu DOM không thể thực hiện được trước IE 8 . Mặc dù vậy, tôi nghĩ rằng vào năm 2015, hầu hết mọi người không cần quan tâm đến những điều như vậy.
Khi bạn đã bao gồm chúng, bạn sẽ có thể xóa phần tử DOM element
khỏi DOM bằng cách gọi
element.remove();