Firefox中使用outerHTML的2种解决方法

 更新时间:2014年06月07日 09:13:27   作者:  
这篇文章主要介绍了Firefox中使用outerHTML的2种解决方法,需要的朋友可以参考下

对于DOM对象的innerHTML属性想必大家都不会陌生,但是outerHTML用起来相对于会少一点了,innerHTML属性返回的是DOM对象从开始标签到结束标签中所包含的HTML,而outerHTML属性返回的是包括DOM对象本身标签在内的HTML,下图能很好的解释两个属性的区别:


outerHTML最开始是属于IE的私有属性,可以查看MSDN上的说明:outerHTML Property(http://msdn.microsoft.com/en-us/library/ms534310(VS.85).aspx)。目前IE、Chrome、Safari、Opera都能支持这个属性,杯具的是outerHTML不支持Firefox,在Firefox中该属性永远返回undefined,值得欣慰的是HTML5会加入这个属性。
让Firefox支持outerHTML属性可以通过扩展HTMLElement的原型来实现:

复制代码 代码如下:

if (typeof(HTMLElement) != "undefined") {
 HTMLElement.prototype.__defineSetter__("outerHTML", function(s) {
 var r = this.ownerDocument.createRange();
 r.setStartBefore(this);
 var df = r.createContextualFragment(s);
 this.parentNode.replaceChild(df, this);
 return s;
 });
 HTMLElement.prototype.__defineGetter__("outerHTML", function(){
 var a = this.attributes, str = "<" this.tagName, i = 0;
 for (; i < a.length; i )
 if (a[i].specified)
 str = " " Hormis dans les machines a sous preferees universelles, les casinos offrent des jeux par exemple Grandes six roues, Pai Go Poker, Blackjack, Baccarat, la <a href="http://topcasinosenligne.com/la-roulette">Roulette </a>et le Craps, entre autres. a[i].name "="" a[i].value """;
 if (!this.canHaveChildren)
 return str " />";
 return str ">" this.innerHTML "<!--" this.tagName "-->";
 });

 HTMLElement.prototype.__defineGetter__("canHaveChildren", function(){
 return
 !/^(area|base|basefont|
 col|frame|hr|img|br|
 input|isindex|link|meta
 |param)$/.test(this.tagName.toLowerCase());
 });



该方法出自W3Help(http://www.w3help.org/zh-cn/causes/SD9017),有点繁琐,而且还要侵入原型。还有一种更简单代替的办法,先创建一个空节点,将要获取outerHTML属性的DOM对象添加到这个空节点中,然后访问这个空节点的innerHTML就行了:

复制代码 代码如下:

function outerHtml(elem){
 if(typeof elem === "string") elem = document.getElementById(elem);
 // 创建一个空div节点
 var div = document.createElement("div");
 // 将复制的elemCopy插入到空div节点中 
 div.appendChild(elem.cloneNode(true));
 // 返回div的HTML内容
 return div.innerHTML; 
};

比起上面的办法,不用去动原型,代码量也少了很多,相信还会有其他的解决办法。

您可能感兴趣的文章:

相关文章

  • 追踪discord.js中删除消息的用户方法实例详解

    追踪discord.js中删除消息的用户方法实例详解

    这篇文章主要为大家介绍了如何追踪discord.js中删除消息的用户方法实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 整理一些JavaScript的IE和火狐的兼容性注意事项

    整理一些JavaScript的IE和火狐的兼容性注意事项

    整理一些JavaScript的IE和火狐的兼容性解决方法,有更好的方法多多交流
    2011-03-03
  • js图片无缝滚动插件使用详解

    js图片无缝滚动插件使用详解

    这篇文章主要为大家详细介绍了js图片无缝滚动插件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 微信小程序学习之常用的视图组件

    微信小程序学习之常用的视图组件

    但是最近由于开发人手不够,一个人开启全栈,一边写接口一边写页面,刚好项目中有一个需求,所以尝试使用自定义组件开发这块,下面这篇文章主要给大家介绍了关于微信小程序学习之常用的视图组件的相关资料,需要的朋友可以参考下
    2022-11-11
  • javascript删除字符串最后一个字符

    javascript删除字符串最后一个字符

    需求是一个字符串,想删除这个字符串最后一个字符,比如“1,2,3,4,5,”,删除最后一个“,”用javascript怎么实现?下面给出三种方法
    2014-01-01
  • 微信小程序工具函数封装

    微信小程序工具函数封装

    这篇文章主要为大家详细介绍了微信小程序工具函数封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 以fetch为例详解如何消除js异步的传染性

    以fetch为例详解如何消除js异步的传染性

    这篇文章主要为大家介绍了以fetch为例详解如何消除js异步的传染性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 理运用命名空间让js不产生冲突避免全局变量的泛滥

    理运用命名空间让js不产生冲突避免全局变量的泛滥

    为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在不同的匿名函数中,根据功能声明一个不同的命名空间
    2014-06-06
  • 详解JavaScript中扁平与树形数据的转换

    详解JavaScript中扁平与树形数据的转换

    这篇文章主要为大家想介绍了JavaScript中实现扁平与树形数据相互转换的方法,文中的示例代码讲解详细,对我们学习JavaScript有一定的帮助,需要的可以参考一下
    2023-01-01
  • js与css实现弹出层覆盖整个页面的方法

    js与css实现弹出层覆盖整个页面的方法

    这篇文章主要介绍了js与css实现弹出层覆盖整个页面的方法,分别以实例形式展示了弹出层覆盖整个页面的css样式与js控制的实现技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12

最新评论