让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 相关文章推荐
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
JavaScript SetInterval与setTimeout使用方法详解
Nov 15 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
深入解析js轮播插件核心代码的实现过程
Apr 14 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 Javascript
关于RxJS Subject的学习笔记
Dec 05 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
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_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
js实现简单的秒表
2020/01/16 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python实现二叉搜索树
2016/02/03 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python日期时间Time模块实例详解
2019/04/15 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
史上最牛辞职信
2015/05/13 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
详解Spring事件发布与监听机制
2021/06/30 Java/Android