让FireFox支持innerText的实现代码


Posted in Javascript onDecember 01, 2009

为firefox实现innerText属性
很多代码写了又忘忘了又写,很浪费,所以决定养成做笔记的习惯。
知识点:
0、为什么要innerText?因为安全问题
1、为firefox dom模型扩展属性
2、currentStyle属性可以取得实际的style状态
3、IE实现innerText时考虑了display方式,如果是block则加换行
4、为什么不用textContent?因为textContent没有考虑元素的display方式,所以不完全与IE兼容

<html> 
<body> 
<div id="d1"><a href="aa">ccc</a>ddd<div>eeee</div>fff</div> 
<script type="text/javascript"> 
<!-- 
// 
// patch of innerText for firefox 
// 
(function (bool) { 
function setInnerText(o, s) { 
while (o.childNodes.length != 0) { 
o.removeChild(o.childNodes[0]); 
} 
o.appendChild(document.createTextNode(s)); 
} 
function getInnerText(o) { 
var sRet = ""; 
for (var i = 0; i < o.childNodes.length; i ++) { 
if (o.childNodes[i].childNodes.length != 0) { 
sRet += getInnerText(o.childNodes[i]); 
} 
if (o.childNodes[i].nodeValue) { 
if (o.currentStyle.display == "block") { 
sRet += o.childNodes[i].nodeValue + "\n"; 
} else { 
sRet += o.childNodes[i].nodeValue; 
} 
} 
} 
return sRet; 
} 
if (bool) { 
HTMLElement.prototype.__defineGetter__("currentStyle", function () { 
return this.ownerDocument.defaultView.getComputedStyle(this, null); 
}); 
HTMLElement.prototype.__defineGetter__("innerText", function () { 
return getInnerText(this); 
}) 
HTMLElement.prototype.__defineSetter__("innerText", function(s) { 
setInnerText(this, s); 
}) 
} 
})(/Firefox/.test(window.navigator.userAgent)); 
//--> 
</script> 
<script type="text/javascript"> 
<!-- 
var d1 = document.getElementById("d1"); 
alert(d1.innerText); 
d1.innerText = "xxx"; 
//--> 
</script> 
</body> 
</html>

今天在制作firefox下支持复制的js代码的时候,用到了innerText,测试发现原来firefox支持innerHTML但不支持innerText,所以上网找了一下,发现了一篇非常不错的代码。另从回复中,我们得到了如下兼容代码。修正了原来ie下出现错误提示的问题。具体的看下么的文章。

把这段加在你所JS文件中就可以在MOZILLA/FIREFOX下使用innerText

HTMLElement.prototype.__defineGetter__ 
( 
"innerText", 
function () 
{ 
var anyString = ""; var childS = this.childNodes; 
for(var i=0; i<childS.length; i++) 
{ 
if(childS[i].nodeType==1) 
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText; 
else if(childS[i].nodeType==3) 
anyString += childS[i].nodeValue; 
} 
return anyString; 
} 
);

但这段代码在IE中它会提示HTMLElement未定义,下面就是具体的解决方法。

function isIE(){ //ie? 判断是不是ie 
if (window.navigator.userAgent.indexOf("MSIE")>=1) 
return true; 
else 
return false; 
} 
if(!isIE()){ 
HTMLElement.prototype.__defineGetter__ 
( 
"innerText", 
function () 
{ 
var anyString = ""; var childS = this.childNodes; 
for(var i=0; i<childS.length; i++) 
{ 
if(childS[i].nodeType==1) 
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText; 
else if(childS[i].nodeType==3) 
anyString += childS[i].nodeValue; 
} 
return anyString; 
} 
); 
}
Javascript 相关文章推荐
jquery入门—数据删除与隔行变色以及图片预览
Jan 07 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
JavaScript函数作用域链分析
Feb 13 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
angular实现form验证实例代码
Jan 17 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
vue+elementUI实现表格关键字筛选高亮
Oct 26 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
Vue如何实现监听组件原生事件
Jul 03 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
JavaScript 直接操作本地文件的实现代码
Dec 01 #Javascript
js 变量类型转换常用函数与代码[比较全]
Dec 01 #Javascript
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 #Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 #Javascript
Ruffy javascript 学习笔记
Nov 30 #Javascript
jquery 分页控件实现代码
Nov 30 #Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 #Javascript
You might like
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
django+js+ajax实现刷新页面的方法
2017/05/22 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
python函数的作用域及关键字详解
2019/08/20 Python
Python函数式编程实例详解
2020/01/17 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Python分类测试代码实例汇总
2020/07/23 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang