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 相关文章推荐
PPK 谈 JavaScript 的 this 关键字 [翻译]
Sep 29 Javascript
js 获取计算后的样式写法及注意事项
Feb 25 Javascript
jquery if条件语句的写法
May 19 Javascript
jQuery 弹出层插件(推荐)
May 24 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
手写实现JS中的new
Nov 07 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php根据年月获取季度的方法
2014/03/31 PHP
yii的CURD操作实例详解
2014/12/04 PHP
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python调用java的Webservice示例
2014/03/10 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Django中提示消息messages的设置方式
2019/11/15 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
财务会计人员求职的自我评价
2014/01/13 职场文书
幼儿园开学寄语
2014/04/03 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
银行员工考核评语
2014/12/31 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
治庸问责工作总结
2015/08/11 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python