JavaScript remove()在IE中不起作用

Ale*_*Pac 40 javascript internet-explorer

我在JavaScript中有以下代码:

all_el_ul = document.getElementsByClassName('element_list')[0];
div_list = all_el_ul.getElementsByTagName("div");
for (i = 0; i < div_list.length; i += 1) {         
  div_list[i].remove();             
}
Run Code Online (Sandbox Code Playgroud)

我知道这是问题,因为我曾经alert('test');看到代码停止工作的地方.一切都在FF,Chrome,Opera和其他工作,但不在IE中.

你能告诉我有什么问题吗?

Ant*_*bit 72

IE不支持remove()本机Javascript功能,但支持removeChild().

remove()的浏览器兼容性

桌面浏览器兼容remove()函数

移动浏览器兼容remove()函数

解决方案n°1

remove()在纯Javascript中使用,您可以使用以下代码自行声明:

// Create Element.remove() function if not exist
if (!('remove' in Element.prototype)) {
    Element.prototype.remove = function() {
        if (this.parentNode) {
            this.parentNode.removeChild(this);
        }
    };
}
// Call remove() according to your need
child.remove();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该函数获取了element的父节点,然后使用removeChild()native函数从父节点中删除了该元素.

解决方案n°2

removeChild()在包括IE在内的所有浏览器上使用纯JavaScript,只需将其命名为remove().

element.removeChild(child);
Run Code Online (Sandbox Code Playgroud)

有关 Mozilla Developer Network的更多信息.

解决方案n°3

通过code.jquery.com CDN使用以下代码使用jQuery:

<!-- Include jQuery -->
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<!-- Use remove() -->
<script>
child.remove();
</script>
Run Code Online (Sandbox Code Playgroud)

该函数包含在jQuery库中,因此您可以在包含后调用它.

快乐的编码!:-)

  • 谢谢!像魅力一样工作! (3认同)
  • 解决方案n°1非常优雅,就像一个魅力.+1 (2认同)
  • 不知何故,它也会引发 jquery 错误。我认为您必须使用 `$(child).remove();` 而不是 `child.remove();` 才能使其工作? (2认同)

ade*_*neo 23

本机childNode.remove()是Internet Explorer中不支持的新实验方法,仅在Edge中

MDN的兼容性表

在此输入图像描述 在此输入图像描述

您可以使用更广泛的支持Node.removeChild,而不是

var all_el_ul = document.getElementsByClassName('element_list')[0];
var div_list  = all_el_ul.getElementsByTagName("div");

for (i = 0; i < div_list.length; i += 1) {         
   div_list[i].parentNode.removeChild(div_list[i]);             
}
Run Code Online (Sandbox Code Playgroud)

或使用MDNpolyfill添加对所有浏览器的支持

(function (arr) {
  arr.forEach(function (item) {
    if (item.hasOwnProperty('remove')) {
      return;
    }
    Object.defineProperty(item, 'remove', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function remove() {
        this.parentNode.removeChild(this);
      }
    });
  });
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
Run Code Online (Sandbox Code Playgroud)

remove()jQuery中还有一个方法,可以跨浏览器工作,但这需要添加jQuery库.

$('.element_list').first().find('div').remove();
Run Code Online (Sandbox Code Playgroud)

作为旁注getElementsByClassName仅适用于IE9及以上版本,使用时querySelector也会添加IE8支持

var all_el_ul = document.querySelector('.element_list');
Run Code Online (Sandbox Code Playgroud)

  • @buzzsawddog:不,MDN(大部分)对所有浏览器都有效.它解释了为什么它适用于其他浏览器但不适用于IE.检查兼容性表. (4认同)

小智 9

尝试将其添加到JavaScript文件的顶部:

if (!('remove' in Element.prototype)) {
  Element.prototype['remove'] = function () {
    if (this.parentNode) {
      this.parentNode.removeChild(this);
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

这是一个小的Element.remove()保鲜纸。

将其添加到您的JS,[element].remove()应该可以神奇地开始在IE中工作。


med*_*eda 5

这是我在IE中必须要做的工作

if (typeof textField.remove === 'function') {
  textField.remove();
} else {
  textField.parentNode.removeChild(textField);
}
Run Code Online (Sandbox Code Playgroud)