让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 相关文章推荐
arguments对象
Nov 20 Javascript
javascript实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
建议大家看下JavaScript重要知识更新
Jul 08 Javascript
javascript权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
js同比例缩放图片的小例子
Oct 30 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
功能完善的小程序日历组件的实现
Mar 31 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
Apache中php.ini的设置方法
2013/02/28 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python代码过长的换行方法
2018/07/19 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python3爬虫学习入门教程
2018/12/11 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
应用心理学个人求职信范文
2013/12/11 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL