让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 Form 页面表单提交的小例子
Nov 15 Javascript
JavaScript中的6种运算符总结
Oct 16 Javascript
Javascript原型链和原型的一个误区
Oct 22 Javascript
js如何实现淡入淡出效果
Nov 18 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
关于Layui Table隐藏列问题
Sep 16 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中json_encode中文编码问题分析
2011/09/13 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
微信小程序(订阅消息)功能
2019/10/25 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
python机器学习之决策树分类详解
2017/12/20 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
基于python调用psutil模块过程解析
2019/12/20 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
伦敦一卡通:The London Pass
2018/11/30 全球购物
公司离职证明范本
2014/10/17 职场文书
保研专家推荐信范文
2015/03/25 职场文书
博士导师推荐信
2015/03/25 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
Linux系统下安装PHP7.3版本
2021/06/26 PHP
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js