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 相关文章推荐
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
May 07 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
vue实现商品加减计算总价的实例代码
Aug 12 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
详解JVM系列之内存模型
Jun 10 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
php操作SVN版本服务器类代码
2011/11/27 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
工作需要写的一个js拖拽组件
2011/07/28 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
一道python走迷宫算法题
2018/01/22 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
专业实习自我鉴定
2013/10/29 职场文书
大学自主招生自荐信
2013/12/16 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
施工安全保证书
2015/05/09 职场文书
雷锋观后感
2015/06/10 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
GO中sync包自由控制并发示例详解
2022/08/05 Golang