让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 清空form表单中某种元素的值
Dec 26 Javascript
juqery 学习之三 选择器 子元素与表单
Nov 25 Javascript
jQuery Clone Bug解决代码
Dec 22 Javascript
JQuery页面的表格数据的增加与分页的实现
Dec 10 Javascript
js给selected添加options的方法
May 06 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
详解Vue Cli浏览器兼容性实践
Jun 08 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
Terran历史背景
2020/03/14 星际争霸
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
简单使用Python自动生成文章
2014/12/25 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python实现用户答题功能
2018/01/17 Python
django 简单实现登录验证给你
2019/11/06 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
廉洁使者实施方案
2014/03/29 职场文书
安全生产月活动总结
2014/05/04 职场文书
公司岗位说明书
2015/10/08 职场文书