让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 相关文章推荐
Javascript字符串浏览器兼容问题分析
Dec 01 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
探究JavaScript函数式编程的乐趣
Dec 14 Javascript
jquery自适应布局的简单实例
May 28 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
js实现随机点名系统(实例讲解)
Oct 18 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
深入浅出了解Node.js Streams
May 27 Javascript
使用react-virtualized实现图片动态高度长列表的问题
May 28 Javascript
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
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
PHP新手入门学习方法
2011/05/08 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
PHP循环结构实例讲解
2014/02/10 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
canvas时钟效果
2017/02/16 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python实现控制台打印的方法
2019/01/12 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
酒店服务与管理毕业生求职信
2013/11/02 职场文书
生产文员岗位职责
2014/04/05 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript