打印

BT9035: 只有 IE 和 Opera 的 HTMLDOMNode 有 removeNode 方法

作者:王军

标准参考

无。

问题描述

只有 IE 和 Opera 的 HTMLDOMNode 有 removeNode 方法,其他浏览器则不支持。

造成的影响

该问题将造成某些使用本特性设计的功能在非 IE 和 Opera 浏览器中不能实现。

受影响的浏览器

IE6 IE7 IE8 Opera

问题分析

HTMLDOMNode.removeNode 是 IE 浏览器的特性,Opera 也实现了该方法。

该方法的简介如下:

removeNode
oRemoved = object.removeNode( [bRemoveChildren])
将目标节从文档树中删除,返回目标节点。是否删除目标节点的子节点由参数 bRemoveChildren 决定,其默认值为 false,即仅删除目标节点,保留子节点。

关于 removeNode 的更多信息,请参考 MSDN removeNode Method

解决方案

不要使用 IE 的特性设计页面代码。

或者针对非 IE 浏览器使用标准方法实现,如:

if(window.Node&&!window.opera){
  Node.prototype.removeNode=function(removeChildren){
    if(removeChildren||!this.hasChildNodes()){
      return this.parentNode.removeChild(this);
    }
    var $parent=this.parentNode;
    var $nextSibling=this.nextSibling;
    var $childNodes=$parent.removeChild(this).childNodes;
    while($childNodes.length){
      $nextSibling?$parent.insertBefore($childNodes[0],$nextSibling):$parent.appendChild($childNodes[0]);
    }
    return this;
  }
}

注:IE 中没有内置函数 Node,即没有节点的“构造函数”。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6
Chrome 4.0.302.3 dev
Safari 4.0.4
Opera 10.51
测试页面: removeNode.html
本文更新时间: 2010-07-18

关键字

removeNode