让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 页面划词搜索JS
Sep 28 Javascript
javascript学习笔记(九) js对象 设计模式
Jun 19 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
探索Vue高阶组件的使用
Jan 08 Javascript
小程序红包雨的实现示例
Feb 19 Javascript
基于JS实现一个随机生成验证码功能
May 29 Javascript
js实现简单分页导航栏效果
Jun 28 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 Javascript
微信小程序实现点击页面出现文字
Sep 21 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产生动态的影像图
2006/10/09 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
js中的闭包学习心得
2018/02/06 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
简单谈谈Python中函数的可变参数
2016/09/02 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
文秘专业毕业生就业推荐信
2013/11/08 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
校园环保标语
2014/06/13 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
大学运动会通讯稿
2015/07/18 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python