让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使用eval或者new Function进行语法检查
Oct 16 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
String.prototype实现的一些javascript函数介绍
Nov 22 Javascript
Jquery常用的方法汇总
Sep 01 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
js字符串操作总结(必看篇)
Nov 22 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
微信小程序实现圆形进度条动画
Nov 18 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
php表单敏感字符过滤类
2014/12/08 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python生成验证码图片代码分享
2016/01/28 Python
python如何在终端里面显示一张图片
2016/08/17 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
中国医药集团国药在线:国药网
2017/02/06 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
医院护士见习期自我鉴定
2014/04/10 职场文书
医学生求职自荐书
2014/06/12 职场文书
文明城市创建标语
2014/06/16 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫