关于Mozilla浏览器不支持innerText的解决办法

比如:
<p id="test"><strong><font color="red">Hello</font> , world!</strong></p>
我们使用代码:alert((document.getElementById("test")).innerText)

在IE、Chrome中,均能获取到“Hello , world!”,但是在Firefox中,却得到了"undefined"。其原为是firefox中并不支持元素的innerText这个属性。当然,在网络上已经有很多好的方法来解决这个问题了,比如给HTMLElement原型添加一个属性(读取器)。

然而,所有文本节点都具有nodeValue属性,而且所有浏览器都是支持的。我们可以尝试用这种方法去读取一个HTML元素内的文本。
下面的原码,正好解决了这个问题:


代码如下:

function getText(e) {
//若浏览器支持元素的innerText属性,则直接返回该属性
if(e.innerText) { return e.innerText; }
//不支持innerText属性时,用以下方法处理
var t = "";

//如果传入的是一个元素对象,则继续访问其子元素
e = e.childNodes || e ;

//遍历子元素的所有子元素
for(var i=0; i<e.length; i++) {
//若为文本元素,则累加到字符串t中。
if(e[i].nodeType == 3) { t += e[i].nodeValue; }

//否则递归遍历元素的所有子节点
else { t += getText(e[i].childNodes); }
}

return t;
}

有了这个函数,我们再来看看如下DOM结构:
<p id="test"><strong><font color="red">Hello</font> , world!</strong></p>
然后,我们用:
alert(getText(document.getElementById("test"));
在IE、Chrome、Firefox中均能获取到 "Hello, world!"

(0)

相关推荐

  • javascript解决innerText浏览器兼容问题思路代码

    下面的函数接收一个参数,该参数可以是数组还可以是一个元素,返回元素的文本. 复制代码 代码如下: function text(e){ var str = ""; //如果传入的是元素,获取它的子元素 //否则,当它是一个数组 e=e.childNodes || e; for ( var i = 0; i < e.length; i++ ) { //判断元素类型 //如果是text就获取它的文本,否则,遍历它的子元素 str += e[i].nodeType != 1 ? e[i]

  • 让innerText在firefox火狐和IE浏览器都能用的写法

    IE中的获取文本方法innerText在firefox中不支持 firefox改成了textContent方法/属性 并且在Firefox中文本中间的空白自符被无情的替换没了 使用起来异常不方便 现在好了,用Javascript重新定义了innerText方法 使得在Firefox中也可以使用innerText方法 并且此方法解决了firefox中空白字符的问题 使用方法: 将下面的脚本放在页面内 不管ie还是firefox都可以使用obj.innerText提取文本了 复制代码 代码如下: <

  • 关于Mozilla浏览器不支持innerText的解决办法

    比如: <p id="test"><strong><font color="red">Hello</font> , world!</strong></p> 我们使用代码:alert((document.getElementById("test")).innerText) 在IE.Chrome中,均能获取到"Hello , world!",但是在Firefo

  • firefox浏览器不支持innerText的解决方法

    js代码: 复制代码 代码如下: <script> window.onload = function(){ <PRE class=javascript name="code">if(window.navigator.userAgent.toLowerCase().indexOf("msie")==0){ //firefox innerText HTMLElement.prototype.__defineGetter__( "inne

  • Ajax打开新窗口被浏览器拦截的两种解决办法

    最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以不是用户主动触发的打开ixin窗口,浏览器认为这样不安全,所以给拦截了. 解决办法一 先开始打开一个空的新窗口,然后改变新窗口的url,具体代码为 var wd = window.open(); $.ajax({ type: "POST", dataType: "json", url: URL, data: {orderNo:orderNo}, succes

  • IE浏览器不支持getElementsByClassName的解决方法

    在DOM3里已经加入了getElementsByClassName这个方法,然而IE9.10以外的其它版本均不支持,这是一块伤痛啊! 目前可以这么解决,判断浏览器支不支持这个方法,如果支持就不管:如果不支持,就在document对象里加入getElementsByClassName这个方法,这样的写法有一个好处,即不管有没有原生函数你都不用去修改代码. 网上部分人直接定义一个getElementsByClassName函数,但是这样的话就需要把代码中所有使用document.getElement

  • TextArea不支持maxlength的解决办法(jquery)

    用.net 控件久了,在给一个页面的TextBox 增加控制长度的控制时,简单的加了一个maxlength='xxx' 就行,可是测试确总是不过,原因是设置了多行模式,在这样的情况下生成的html代码就是textarea,同时maxlength属性就没有被增加上,因为IE不支持textarea 的 maxlength属性,于是,在firefox 6中测试,发现firefox是支持这个属性的.那么就简单了.自己写了一个jquery的扩展,这样就可以很容易实现对textarea控制最大长度了. 扩展

  • ServU7不支持中文名的解决办法(Serv-U中文目录和文件名变乱码问题)

    问题症状: ServU7.X版本无法正确创建或者删除中文文件夹和文件名. 问题原因:编码问题 解决方法: 步骤1,打开Serv-u 7的后台管理,找到"限制和设置"-然后点击"为域配置高级FTP命令和行为" <图1> 步骤2.在"为域配置高级FTP命令和行为"设置界面里点击"用户定制设置"如图2所示 <图2> 步骤3:点击"用户定制设置"后,下面会增加一个"全局属性...&

  • ASP.net Menu控件在Google Chrome和Safari浏览器下显示错位的解决办法

    复制代码 代码如下: <browsers> <browser id="Safari3" parentID="Safari1Plus"> <identification> <useragent match="Safari/\d+\.\d+" /> </identification> <capture> <useragent match="Version/(?'v

  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    apt-get install 安装的,不是源码包安装的mysql 1 修改mysql的配置文件 /etc/mysql/conf.d/mysql.cnf 在[mysql]的下方加入如下语句:(注:这个文件下没有配置,只有[mysql]) no-auto-rehash default-character-set=utf8 /etc/mysql/mysql.conf.d/mysqld.cnf 在[mysqld]下加入 socket = /var/run/mysqld/mysqld.sock port

  • PHP 中文乱码解决办法总结分析

    一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312″),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文

  • javascript 解决浏览器不支持的问题

    为了程序/代码的易读性,基本上每一种编程语言都有注释的功能,javascript也不例外,javascript注释代码有多种形式,本文章向大家介绍javascript注释代码的两种方法, javascript注释代码一般有两种方法: 单行注释 多行注释  javascript单行注释 单行注释以"//"开头,到改行的末尾结束.下面是javascript单行注释实例: <html> <head> <title>javascript单行注释</ti

随机推荐