让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操纵Cookie实现购物车程序
Nov 23 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
jquery插件hiAlert实现网页对话框美化
May 03 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
javascript解析xml实现省市县三级联动的方法
Jul 25 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 Javascript
JavaScript中七种流行的开源机器学习框架
Oct 11 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
JQuery特殊效果和链式调用操作示例
May 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中的内存管理问题
2011/08/31 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
JS 判断代码全收集
2009/04/28 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
详解python字节码
2018/02/07 Python
高效使用Python字典的清单
2018/04/04 Python
Python使用folium excel绘制point
2019/01/03 Python
python中update的基本使用方法详解
2019/07/17 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
Django如何实现上传图片功能
2019/08/16 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
大学生2014全国两会学习心得体会
2014/03/10 职场文书
设计师求职信
2014/07/01 职场文书
公司老总年会致辞
2015/07/30 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
详解Vue router路由
2021/11/20 Vue.js
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python