http://hi.baidu.com/yuiezt/item/756d0f4ec4d2640ec11613f9

 

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() 即可)

1. String.prototype.trim = function () {

2.return this .replace(/^\s\s*/, '' ).replace(/\s\s*$/, '' );

3. }

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

实现2

1. String.prototype.trim = function () {

2.return this .replace(/^\s /, '' ).replace(/\s $/, '' );

3. }

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

实现3

1. String.prototype.trim = function () {

2.returnthis .substring(Math.max( this .search(/\S/), 0), this .search(/\S\s*$/) 1);

3. }

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

实现4

1. String.prototype.trim = function () {

2.returnthis .replace(/^\s |\s $/g, '' );

3. }

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

实现5

1. String.prototype.trim = function () {

2.var str = this ;

3.str = str.match(/\S (?:\s \S )*/);

4.return str ? str[0] : '' ;

5. }

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

实现6

1. String.prototype.trim = function () {

2.return this .replace(/^\s*(\S*(\s \S )*)\s*$/, '$1' );

3. }

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

实现7

1. String.prototype.trim = function () {

2.return this .replace(/^\s*(\S*(?:\s \S )*)\s*$/, '$1' );

3. }

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

实现8

1. String.prototype.trim = function () {

2.return this .replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1' );

3. }

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

实现9

1. String.prototype.trim = function () {

2.return this .replace(/^\s*([\S\s]*?)\s*$/, '$1' );

3. }

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

实现10

01. String.prototype.trim = function () {

02.var str = this ,

03.whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u20 05\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\ u3000' ;

04.for ( var i = 0,len = str.length; i = 0; i--) {

11.if (whitespace.indexOf(str.charAt(i)) === -1) {

12.str = str.substring(0, i 1);

13.break ;

14.}

15.}

16.return whitespace.indexOf(str.charAt(0)) === -1 ? str : '' ;

17. }

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

实现11

01. String.prototype.trim = function () {

02.var str = this ,

03.str = str.replace(/^\s /, '' );

04.for ( var i = str.length - 1; i >= 0; i--) {

05.if (/\S/.test(str.charAt(i))) {

06.str = str.substring(0, i 1);

07.break ;

08.}

09.}

10.return str;

11. }

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

实现12

1. String.prototype.trim = function () {

2.var str = this ,

3.str = str.replace(/^\s\s*/, '' ),

4.ws = /\s/,

5.i = str.length;

6.while (ws.test(str.charAt(--i)));

7.return str.slice(0, i 1);

8. }

实现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函数实现揭晓自己的想法,想懂得原作者说什么请看原文。

转:IE 无法使用 js trim() 的解决方法的更多相关文章

  1. Sublime Text 无法使用Package Control的解决方法 以及 常用的插件安装过程

    大概一个月之前给 Macbook air 装 Sublime Text 3 的时候,遇到过这个问题,当时解决了,现在回想,感觉忘的七七八八了,赶紧趁着还没有全忘光的时候记下来,当时的过程记得不一定准确 ...

  2. 常见JS(JavaScript)冲突解决方法

    1.一般JS冲突解决办法 a.最容易出现的就是js的命名冲突 ①.变量名冲突 变量有全局变量和局部变量当全局变量变量和局部变量名称一致时,就会js冲突,由于变量传递数值或地址不同就会产生JavaScr ...

  3. IE 不兼容的几个js问题及解决方法

    IE 不兼容的几个js问题及解决方法 1 Table的问题   在动态新增tr或者td时,createElecment() 一般用appendChild();都不生效,解决办法是用新增tbody, 如 ...

  4. IE 不兼容的几个js问题及解决方法1

    IE 不兼容的几个js问题及解决方法 1 Table的问题   在动态新增tr或者td时,createElecment() 一般用appendChild();都不生效,解决办法是用新增tbody, 如 ...

  5. Eclipse中导入项目后js报错解决方法(转未解决问题)

    本文转自:http://blog.csdn.net/chenchunlin526/article/details/54666882 Eclipse中导入项目后js报错的原因与解决方法 在我们将项目导入 ...

  6. Kali无法使用Chrome原因及解决方法

      Kali安装好后,默认的浏览器是Firefox-ESR(Extended Support Release 长期支持)版本.   作为Chrome的死忠粉,当然是要下Chrome用用的.   直到我 ...

  7. 页面渲染时js阻塞的解决方法

    一般地,一个包含外部样式表文件和外部脚本文件的HTML载入和渲染过程是这样的: 浏览器下载HTML文件并开始解析DOM. 遇到样式表文件link[rel=stylesheet]时,将其加入资源文件下载 ...

  8. Unity5.x在WP8.1中无法使用Reflection API的解决方法

    下班前随便写点,虽然花了不少时间但是最终得到的解决方法还是比较简单的. 第一种方法:使用WinRTLegacy.dll中的类.这个dll在生成的WP project中是自带的无需在unity工程中添加 ...

  9. Window8.1 64位无法使用Debug命令的解决方法[附牛人代码]

    偶然看到网上一篇文章,讲的是世界黑客编程大赛第一名的一个很酷的程序,大小仅有4KB,使用debug命令执行. 悲催的是win8.1的debug命令不能使用. 错误例如以下: 解决方法例如以下: 1. ...

随机推荐

  1. Spark的数据存储(十九)

    Spark本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径.Spark本身则根据存储位置.是否可序列化和副本数目这几个要素将数据存储分为多种存储级别.此外还可选择使用Tachyon来管 ...

  2. java与javascript对cookie操作的工具类

    Java对cookie的操作 package cn.utils; import java.util.HashMap; import java.util.Map; import javax.servle ...

  3. 如何解决 不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型

    distinct去重,如果遇到text字段,可以用以下方法解决 1.用not exists select * from tab awhere not exists (  select 1 from t ...

  4. Front End Developer Questions

    Front End Developer Questions 感谢大神分享- 目录 前言 HTML部分 CSS部分 JavaScript部分 其他问题 前端学习网站推荐 前言 前言 HTML Docty ...

  5. composer install或者update 出错

    composer install或者update  出错Your requirements could not be resolved to an installable set of package ...

  6. 搭建hadoop java开发环境

    package hadoopDemo; import java.io.IOException; import java.net.URI; import java.net.URISyntaxExcept ...

  7. [php]如何做到高并发优化

    在实际的开发过程中我们遇到过各种各样的活动,但像用户流量较大的平台就需要考虑高并发的问题,但是如何去解决呢?我总结了几种解决方案,欢迎大家指正! 一.什么是PV/UV/QPS? PV:页面访问量,即P ...

  8. typedef和define混用产生的错误

    最近在写代码过程中,发现一个问题,编译总是过不去,报错如下: stdint.h::: error: duplicate 'unsigned' stdint.h::: error: 'long long ...

  9. Javascript的jsonp原理

    Javascript的jsonp原理   首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...

  10. vue懒加载实现