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 相关文章推荐
在线游戏大家来找茬II
Sep 30 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
JQuery之focus函数使用介绍
Aug 20 Javascript
简单的代码实现jquery定时器
Jan 03 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
简单实现限制uploadify上传个数
Nov 16 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
js实现图片实时时钟
Jan 15 Javascript
vue实现短信验证码输入框
Apr 17 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中对数据库操作的封装
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
WordPress JQuery处理沙发头像
2009/06/22 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
js 巧妙去除数组中的重复项
2010/01/25 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
详解Python IO编程
2020/07/24 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
计算机系毕业生推荐信
2013/11/06 职场文书
先进个人获奖感言
2014/01/24 职场文书
小学生读书感言
2014/02/12 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python