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 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
Jul 14 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
javascript的理解及经典案例分析
May 20 Javascript
Bootstrap下拉菜单效果实例代码分享
Jun 30 Javascript
jQuery 3.0中存在问题及解决办法
Jul 15 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
Dec 29 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
php常用数学函数汇总
2014/11/21 PHP
CI框架附属类用法分析
2018/12/26 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
python实现图片转字符画
2021/02/19 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
行政主管职责范本
2014/03/07 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
红色故事汇观后感
2015/06/18 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
详解nginx进程锁的实现
2021/06/14 Servers
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电