让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 this关键字使用分析
Oct 21 Javascript
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
JavaScript中valueOf函数与toString方法深入理解
Dec 02 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 Javascript
angular.js中解决跨域问题的三种方式
Jul 12 Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 Javascript
layer弹出层取消遮罩的方法
Sep 25 Javascript
vuex的使用步骤
Jan 06 Vue.js
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 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
javascript天然的迭代器
2010/10/29 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
python去除字符串中的换行符
2017/10/11 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
浅谈Python中的模块
2020/06/10 Python
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
公司年会演讲稿范文
2014/01/11 职场文书
经典婚礼主持词
2014/03/13 职场文书
自我推荐信范文
2014/05/09 职场文书
商业街策划方案
2014/05/31 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
小城镇建设汇报材料
2014/08/16 职场文书