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


Posted in Javascript onJune 07, 2014

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

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; 
};

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

Javascript 相关文章推荐
jQuery获取选中内容及设置元素属性的方法
Jul 09 Javascript
jQuery内部原理和实现方式浅析
Feb 03 Javascript
JavaScript中textRange对象使用方法小结
Mar 24 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
浅析jQuery Ajax通用js封装
Jun 22 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
分享十三个最佳JavaScript数据网格库
Apr 07 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 #Javascript
判断iframe里的页面是否加载完成
Jun 06 #Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 #Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 #Javascript
jquery数组过滤筛选方法grep()简介
Jun 06 #Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 #Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 #Javascript
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP处理postfix邮件内容的方法
2015/06/16 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
php 猴子摘桃的算法
2017/06/20 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
ext监听事件方法[初级篇]
2008/04/27 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python输出带颜色字体实例方法
2019/09/01 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
医学院校毕业生自荐信范文
2014/01/01 职场文书
环保建议书100字
2014/05/14 职场文书
研究生求职自荐书
2014/06/23 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android