让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 相关文章推荐
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
关于JQuery($.load)事件的用法和分析
Apr 09 Javascript
JavaScript代码复用模式详解
Nov 07 Javascript
全面解析Bootstrap中form、navbar的使用方法
May 30 Javascript
javascript history对象详解
Feb 09 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
Dec 05 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
vue-router的两种模式的区别
May 30 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 Javascript
手把手带你搭建一个node cli的方法示例
Aug 07 Javascript
vue项目在线上服务器访问失败原因分析
Aug 14 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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
python机器学习实战之K均值聚类
2017/12/20 Python
python安装requests库的实例代码
2019/06/25 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
简单了解Django项目应用创建过程
2020/07/06 Python
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
英文简历中的自我评价用语
2013/12/09 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
交通事故协议书范文
2014/04/16 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js