关于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!"
相关推荐
-
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
随机推荐
- js实现简单数字变动效果
- vbs枚举进程 vbs列出进程的详细列表
- 浅谈python中copy和deepcopy中的区别
- PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
- 用shell抽取,更新db2的数据
- JS去除字符串中空格的方法
- 详解Java编程中throw和throws子句的使用方法
- java读取文件字符集示例方法
- PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
- PHP使用数组实现矩阵数学运算的方法示例
- java中form以post、get方式提交数据中文乱码问题总结
- MySQL中使用or、in与union all在查询命令下的效率对比
- Android基于socket实现的简单C/S聊天通信功能
- js中关于new Object时传参的一些细节分析
- BootStrap中按钮点击后被禁用按钮的最佳实现方法
- sqlserver not in 语句使程充崩溃
- jQuery中:last选择器用法实例
- nodejs基础知识
- JavaScript使用focus()设置焦点失败的解决方法
- JavaScript函数参数使用带参数名的方式赋值传入的方法