IE11中remove()函数未定义求助:Chrome正常运行IE11报错
解决IE11中
remove()函数未定义的问题 嘿,这个坑我踩过好多次了!IE11对现代DOM API的支持确实跟不上趟,你遇到的问题根源就在这里:
你代码里的$("#popSelf").children()[1]获取到的是原生DOM元素,而IE11的原生DOM元素并没有实现remove()方法(这个方法是ES6之后才被加入标准的,IE11停更太早没赶上),但Chrome等现代浏览器已经支持了,所以才会出现跨浏览器的差异。
给你两个靠谱的解决办法:
方法一:用jQuery的方法来操作(最推荐)
直接用jQuery的eq()方法获取对应位置的元素,它返回的是jQuery封装后的对象,jQuery的remove()方法已经做了全浏览器兼容,包括IE11:
修改后的完整代码:
function restartAnimatorSelf() { var el = $('#selfLabel'), newone = el.clone(true); el.before(newone); // 用eq(1)替代[1],获取jQuery对象后调用remove $("#popSelf").children().eq(1).remove(); }
方法二:给IE11补全原生remove()方法
如果你更倾向于用原生DOM操作,可以给Element原型添加兼容的remove()方法,这样原生元素也能调用这个方法了:
// 先判断浏览器是否已经支持remove方法,避免重复定义 if (!('remove' in Element.prototype)) { Element.prototype.remove = function() { // 原生删除逻辑:通过父节点移除子元素 if (this.parentNode) { this.parentNode.removeChild(this); } }; }
把这段代码放在你的脚本最前面,之后原来的代码就可以在IE11里正常运行了。
两种方法都能解决问题,个人更推荐第一种,毕竟用jQuery的话能少写很多兼容代码,也更符合你现有代码的风格~
内容的提问来源于stack exchange,提问作者Gontse Ranoto
相关产品推荐
相关产品推荐

