javascript – jQuerys $.trim(),错误或写得不好?

前端之家收集整理的这篇文章主要介绍了javascript – jQuerys $.trim(),错误或写得不好?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
$.trim()使用以下RegExp来修剪字符串:
/^(\s|\u00A0)+|(\s|\u00A0)+$/g

事实证明,这可能很丑陋,例如:

var mystr = '    some test --          more text            new test                                         xxx';
mystr = mystr.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g,"");

代码挂起Firefox和Chrome,它只是永远都是这样. “mystr”包含空格,但主要是十六进制160(A0)字符.这个“问题”只会发生,如果没有前缀的空格/ A0,但在字符串内的某个地方.我不知道为什么会发生这种情况.

这个表达:

/^[\n\r\t \xA0]+|[\n\r\t \xA0]$/g

在所有测试场景中工作正常.也许是更好的模式吗?

资料来源:http://code.jquery.com/jquery-1.4.2.js

UPDATE

看起来您无法复制并粘贴此示例字符串,在某些点,这些A0字符被替换. Firebug控制台还将替换粘贴上的字符,您必须在sepepate html文件/编辑器中创建自己的字符串来测试此.

解决方法

正如在评论中所说的那样,这是一个 known bug,而Crescent在1.4.2中是正确的,但是下一个版本已经解决了.

您可以测试字符串中String.prototype.trim的速度:http://jsfiddle.net/dLLVN/
在Firefox中,我可以在Firefox中运行大约79ms,在Firefox中运行一百万次,所以这将修复挂起的问题:)

至于修复,take a look at the current source that’ll be in 1.4.3,现在的修剪现在使用.

为此进行了2次提交:

> http://github.com/jquery/jquery/commit/141ad3c3e21e7734e67e37b5fb39782fe11b3c18
> http://github.com/jquery/jquery/commit/ba8938d444b9a49bdfb27213826ba108145c2e50

1.4.2 $.trim() function

trim: function( text ) {
    return (text || "").replace( rtrim,"" );
},

1.4.3 $.trim() function

//earlier: 
trim = String.prototype.trim

//new trim here
trim: trim ?
  function( text ) {
    return text == null ?
      "" : 
      trim.call( text ); 
  } :

  // Otherwise use our own trimming functionality
  function( text ) { 
    return text == null ? 
      "" :
      text.toString().replace( trimLeft,"" ).replace( trimRight,"" );
  }

trimLeft和trimRight有所不同,具体取决于您是否在IE中,如下所示:

trimLeft = /^\s+/,trimRight = /\s+$/,// Verify that \s matches non-breaking spaces
// (IE fails on this test)
if ( !/\s/.test( "\xA0" ) ) {
  trimLeft = /^[\s\xA0]+/;
  trimRight = /[\s\xA0]+$/;
}
原文链接:https://www.f2er.com/jquery/151173.html

猜你在找的jQuery相关文章