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 非图片动态loading效果实现代码
Apr 09 Javascript
jquery 日期分离成年月日的代码
May 14 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
JavaScript 动态加载脚本和样式的方法
Apr 13 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
js 动态生成html 触发事件传参字符转义的实例
Feb 14 Javascript
总结js函数相关知识点
Feb 27 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
vue中的mescroll搜索运用及各种填坑处理
Oct 30 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
Vue响应式原理详解
2017/04/18 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
详解Python Socket网络编程
2016/01/05 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
python datetime处理时间小结
2020/04/16 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
Python的collections模块真的很好用
2021/03/01 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
了解AppleTalk协议吗
2014/04/01 面试题
出纳岗位职责模板
2013/11/27 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
中文专业求职信
2014/06/20 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
居安思危观后感
2015/06/11 职场文书
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android