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 相关文章推荐
HTML中Select不用Disabled实现ReadOnly的效果
Apr 07 Javascript
asp.net下利用js实现返回上一页的实现方法小集
Nov 24 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
Apr 12 Javascript
详解vue移动端项目的适配(以mint-ui为例)
Aug 17 Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP四大安全策略
2014/03/12 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
python 的列表遍历删除实现代码
2020/04/12 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
献爱心标语
2014/06/21 职场文书
小学清明节活动总结
2014/07/04 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
小学工作总结2015
2015/05/04 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
高效课堂教学反思
2016/02/24 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL