让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插件处理mouseover时内部有子元素时发生样式闪烁
Dec 08 Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
jQuery编程中的一些核心方法简介
Aug 14 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
Jun 25 Javascript
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 jQuery
详解vue中axios的使用与封装
Mar 20 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
python求crc32值的方法
2014/10/05 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python如何实现爬取B站视频
2020/05/20 Python
python 线程的五个状态
2020/09/22 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
普通院校学生的自荐信
2013/11/27 职场文书
土地转让协议书
2014/04/15 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
跑出一片天观后感
2015/06/08 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书