ie 7/8不支持trim的属性的解决方案


Posted in Javascript onMay 23, 2014

在ie 7 8浏览器中,如果使用trim()属性去除空格的话,则会导致报错。

因此解决这个问题有如下方案:

var aa = $("#id").val().trim()   --- 在IE中无法解析trim() 方法

解决办法:

[   var aa = $.trim($("#id").val());  ] 这个不好用,还是用下面介绍的吧,第一个已经过测试。
 

W3C那帮人的脑袋被驴踢了,直到java script1.8.1才支持trim函数(与trimLeft,trimRight),可惜现在只有 firefox3.5支持。由于去除字符串两边的空白实在太常用,各大类库都有它的影子。加之,外国人都很有研究精力,搞鼓了相当多实现。

实现1  OK  的。(在js中写上这个,然后直接在你要去空格的字符串后面跟上 .trim() 即可)

 String.prototype.trim = function () {
return this .replace(/^\s\s*/, '' ).replace(/\s\s*$/, '' );
 }

看起来不怎么样,动用了两次正则替换,实际速度很是惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer还快。base2类库施用这种实现。

实现2

 String.prototype.trim = function () {
return this .replace(/^\s /, '' ).replace(/\s $/, '' );
 }

和实现1很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js施用这种实现,不过其名儿为strip,因为Prototype的方法都是力图与Ruby重名。

实现3

 String.prototype.trim = function () {
returnthis .substring(Math.max( this .search(/\S/), 0), this .search(/\S\s*$/) 1);
 }

以截取方式取得空白部分(当然允许中间存在空白符),总共调用了4个原生方法。预设得很是巧妙,substring以两个数码作为参数。Math.max以两个数码作参数,search则归回一个数码。速度比上边两个慢一点,但比下面大大都都快。

实现4

 String.prototype.trim = function () {
returnthis .replace(/^\s |\s $/g, '' );
 }

这个可以称得上实现2的简化版,就是利用候选操作符连接两个正则。但这样做就落空了浏览器优化的机会,比不上实现3。由于看来很优雅,许多类库都施用它,如JQuery与mootools

实现5

 String.prototype.trim = function () {
var str = this ;
str = str.match(/\S (?:\s \S )*/);
return str ? str[0] : '' ;
 }

match是归回一个数组,是以原字符串切合要求的部分就成为它的元素。为了防止字符串中间的空白符被解除,咱们需要动用到非捕获性分组(?:exp)。由于数组可能为空,咱们在后面还要做进一步的判定。好像浏览器在处理分组上比力无力,一个字慢。所以不要迷信正则,虽然它基本上是万能的。

实现6

 String.prototype.trim = function () {
return this .replace(/^\s*(\S*(\s \S )*)\s*$/, '$1' );
 }
 

把切合要求的部分提供出来,放到一个空字符串中。不过效率很差,尤其是在IE6中。

实现7

 String.prototype.trim = function () {
return this .replace(/^\s*(\S*(?:\s \S )*)\s*$/, '$1' );
 }
 

和实现6很相似,但用了非捕获分组进行了优点,性能效之有一点点提升。

实现8

 String.prototype.trim = function () {
return this .replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1' );
 }
 

沿着上边两个的思路进行改进,动用了非捕获分组与字符集合,用?顶替了*,效果很是惊人。尤其在IE6中,可以用疯狂来形容这次性能的提升,直接秒杀火狐。

实现9

 String.prototype.trim = function () {
return this .replace(/^\s*([\S\s]*?)\s*$/, '$1' );
 }
 

这次是用懒惰匹配顶替非捕获分组,在火狐中得到改善,IE没有上次那么疯狂。

实现10

 String.prototype.trim = function () {
var str = this ,
whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u20 05\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\ u3000' ;
for ( var i = 0,len = str.length; i = 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i 1);
break ;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '' ;
 }

我只想说,搞出这个的人已不是用牛来形容,已是神一样的级别。它先是把可能的空白符全部列出来,在第一次遍历中砍掉前边的空白,第二次砍掉后面的空白。全过程只用了indexOf与substring这个专门为处理字符串而生的原生方法,没有施用到正则。速度快得惊人,预计直逼上内部的二进制实现,并且在IE与火狐(其它浏览器当然也毫无疑问)都有杰出的表现。速度都是零毫秒级另外。

实现11

 String.prototype.trim = function () {
var str = this ,
str = str.replace(/^\s /, '' );
for ( var i = str.length - 1; i >= 0; i--) {
if (/\S/.test(str.charAt(i))) {
str = str.substring(0, i 1);
break ;
}
}
return str;
 }

实现10已告诉咱们普通的原不认识的字符串截取方法是远胜于正则替换,虽然是复杂一点。但只要正则不过于复杂,咱们就可以利用浏览器对正则的优化,改善程序执行效率,从实现8在IE的表现。我想通常不会有人在项目中应用实现10,因为那个whitespace 实现过长太难记了(当然如果你在打造一个类库,它绝对是起首)。实现11可谓其改进版,前边部分的空白由正则替换负责砍掉,后面用原生方法处理,效果不逊于原版,但速度都是很是逆天。

实现12

 String.prototype.trim = function () {
var str = this ,
str = str.replace(/^\s\s*/, '' ),
ws = /\s/,
i = str.length;
while (ws.test(str.charAt(--i)));
return str.slice(0, i 1);
 }

实现10与实现11在写法上更好的改进版,注意说的不是性能速度,而是易记与施用上。和它的两个先辈都是零毫秒级另外,以后就用这个来工作与吓人。

下面是老外给出的比力结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。

实现 Firefox 2 IE 6

trim1 15ms trim2 31ms trim3 46ms 31ms
trim4 47ms 46ms
trim5 156ms 1656ms
trim6 172ms 2406ms
trim7 172ms 1640ms
trim8 281ms trim9 125ms 78ms

trim10 trim11 trim12 trim函数实现揭晓自己的想法,想懂得原作者说什么请看原文。

JS去除空格的方法目前共有12种:

实现1
String.prototype.trim = function() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
实现2
String.prototype.trim = function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }
实现3
String.prototype.trim = function() { return this.s string(Math.max(this.search(/\S/), 0),this.search(/\S\s*$/) + 1); }
实现4
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }
String.prototype.trim = function() { var str = this; str = str.match(/\S+(?:\s+\S+)*/); return str ? str[0] : ''; }
String.prototype.trim = function() { return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1'); }
实现7
String.prototype.trim = function() { return this.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1'); }
String.prototype.trim = function() { return this.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1'); }
String.prototype.trim = function() { return this.replace(/^\s*([\S\s]*?)\s*$/, '$1'); }
String.prototype.trim = function() { var str = this, whitespace = ' \n\r\t\f\x0b\xa0\?\?\?\?\?\?\?\?\?\?\?\?\?\?\ '; for (var i = 0,len = str.length; i < len; i++) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.s string(i); break; } } for (i = str.length - 1; i >= 0; i--) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.s string(0, i + 1); break; } } return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''; }
实现11
String.prototype.trim = function() { var str = this, str = str.replace(/^\s+/, ''); for (var i = str.length - 1; i >= 0; i--) { if (/\S/.test(str.charAt(i))) { str = str.s string(0, i + 1); break; } } return str; }
实现12
String.prototype.trim = function() { var str = this, str = str.replace(/^\s\s*/, ''), ws = /\s/, i = str.length; while (ws.test(str.charAt(--i))); return str.slice(0, i + 1); }

看起来不怎么样, 动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringB?r 还快。base2类库使用这种实现。

和实现1 很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js使用这种实现,不过其名字为strip,因为 Prototype的方法都是力求与R y同名。

以截取方式取得空白部分(当然允许中间存在空白符),总共 调用了四个原生方法。设计得非常巧妙,s string以两个数字作为参数。Math.max以两个数字作参数,search则返回一个数字。速度比上 面两个慢一点,但比下面大多数都快。

这个可以称得上实现2的简化版,就是 利用候选操作符连接两个正则。但这样做就失去了浏览器优化的机会,比不上实现3。由于看来很优雅,许多类库都使用它,如JQry与mootools

实现5

match 是返回一个数组,因此原字符串符合要求的部分就成为它的元素。为了防止字符串中间的空白符被排除,我们需要动用到非捕获性分组(?:exp)。由于数组可 能为空,我们在后面还要做进一步的判定。好像浏览器在处理分组上比较无力,一个字慢。所以不要迷信正则,虽然它基本上是万能的。

实现6

把符合要求的部分提供出来,放到一个空字符串中。不过效率很差,尤其是在IE6中。

和实现6很相似,但用了非捕获分组进行了优点,性能效之有一点点提升。

实现8

沿着上面两个的思路进行改进,动用了非捕获分组与字符集合,用?顶替了*,效果非常惊人。尤其在IE6中,可 以用疯狂来形容这次性能的提升,直接秒杀火狐。

实现9

这次是用懒惰匹配 顶替非捕获分组,在火狐中得到改善,IE没有上次那么疯狂。

实现10

我 只想说,搞出这个的人已经不是用牛来形容,已是神一样的级别。它先是把可能的空白符全部列出来,在第一次遍历中砍掉前面的空白,第二次砍掉后面的空白。全 过程只用了indexOf与s string这个专门为处理字符串而生的原生方法,没有使用到正则。速度快得惊人,估计直逼上内部的二进制实现,并且在 IE与火狐(其他浏览器当然也毫无疑问)都有良好的表现。速度都是零毫秒级别的。

实现10已经告诉我们普通的原生字符串截取方法是远胜于正则替换,虽然是复杂一点。但只要正则 不过于复杂,我们就可以利用浏览器对正则的优化,改善程序执行效率,如实现8在IE的表现。我想通常不会有人在项目中应用实现10,因为那个 whitespace 实现太长太难记了(当然如果你在打造一个类库,它绝对是首先)。实现11可谓其改进版,前面部分的空白由正则替换负责砍掉,后面用原生方法处理,效果不逊 于原版,但速度都是非常逆天。

实现10与实现11在写法上更好的改进版,注意说的不是性能速 度,而是易记与使用上。和它的两个前辈都是零毫秒级别的,以后就用这个来工作与吓人。

Javascript 相关文章推荐
JQuery 学习笔记 选择器之三
Jul 23 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
JS教程:window.location使用方法的区别介绍
Oct 04 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
Nov 14 Javascript
JavaScript中的Function函数
Aug 27 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
Nov 08 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 Javascript
Javascript读写cookie的实例源码
Mar 16 Javascript
基于JavaScript实现单例模式
Oct 30 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 #Javascript
jquery重复提交请求的原因浅析
May 23 #Javascript
jquery仿搜索自动联想功能代码
May 23 #Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 #Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 #Javascript
jQuery 获取兄弟元素的几种不错方法
May 23 #Javascript
jquery 中的each()跳出循环的语句
May 23 #Javascript
You might like
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
加速XP搜索功能堪比vista
2007/03/22 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
js Event对象的5种坐标
2011/09/12 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
python使用pil生成图片验证码的方法
2015/05/08 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python深度优先算法生成迷宫
2018/01/22 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python3 读取Excel表格中的数据
2018/10/16 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
经销商会议欢迎词
2014/01/11 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
员工培训协议书
2014/09/15 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server