JavaScript 中的 .trim() 在 IE 中不起作用

Posted

技术标签:

【中文标题】JavaScript 中的 .trim() 在 IE 中不起作用【英文标题】:.trim() in JavaScript not working in IE 【发布时间】:2011-01-19 11:18:11 【问题描述】:

我尝试将.trim() 应用于我的一个javascript 程序中的字符串。它在 Mozilla 下运行良好,但在 IE8 中尝试时显示错误。有谁知道这里发生了什么?无论如何我可以让它在IE中工作吗?

代码:

var ID = document.getElementByID('rep_id').value.trim();

错误显示:

消息:对象不支持此属性或方法
线路:604
字符:2
代码:0
URI:http://test.localhost/test.js

【问题讨论】:

我看不到您计算机上存储的内容。您可以将 test.js 上传到存储网站吗?另外,我需要查看实际的 trim() 函数以查看问题所在。谢谢! @ItzWarty "whatever ".trim() 在 IE8 上试试。 仅供参考:msdn.microsoft.com/en-us/library/ie/ff679971(v=vs.94).aspx 我在 Google 上搜索了 trim() 的 IE8 兼容性,当我发现它不受支持时我不敢相信自己的眼睛。感谢您清除它。我打算和你问的一样问。 【参考方案1】:

我认为 JavaScript 标准中没有原生的 trim() 方法。也许 Mozilla 提供了一个,但如果你想要一个在 IE 中,你需要自己编写它。 this page上有几个版本。

【讨论】:

【参考方案2】:

https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim

这是对 javascript 的最新添加,IE 不支持它。

【讨论】:

【参考方案3】:

在 IE 中似乎没有实现该功能。如果您使用的是 jQuery,则可以使用 $.trim() 代替(尽管自 jQuery 3.5 起已弃用)。

【讨论】:

现在,我喜欢 jQuery,但只为 .trim() 导入它似乎有点过分了 我同意。这就是为什么我说“如果你使用 jQuery ...”=) @Erik 这是 Jin 会遇到的唯一 IE 问题吗?无需使用库的浏览器清理功能,我就可以编写很多有用的 javascript。 请注意 $.trim() 与 $(.val().trim() 不同 - 更多信息在这里:***.com/questions/4315570/…【参考方案4】:

添加以下代码为字符串添加修剪功能。

if(typeof String.prototype.trim !== 'function') 
  String.prototype.trim = function() 
    return this.replace(/^\s+|\s+$/g, ''); 
  

【讨论】:

好答案。请注意,replace(/^\s\s*/, '').replace(/\s\s*$/, '') 应该比 Firefox 2 中的 replace(/^\s+|\s+$/, '') 快​​大约 3 倍,根据一个基准测试:blog.stevenlevithan.com/archives/faster-trim-javascript 还要注意replace(/^\s+|\s+$/, '') 只删除前导或尾随空格,这不是修剪函数所期望的行为。如果要删除前导空格和尾随空格,则需要使用replace(/^\s+|\s+$/g, '') 对我来说似乎有点傻。不是每个 js 框架都提供了一个实用的 trim() 函数吗?如果这是您唯一遇到的问题,那很好,但是 IE 有很多“不同”的方式,这将使库在短期内值得。 @Stephen 是的,你是对的,但问题不在于框架。这是关于 javascript 和修剪的。 如果您不使用 jQuery,这是一个不错的解决方案。但如果不是,$.trim() 似乎是一个更好的解决方案,因为它可以让你的脚本更简单一些。【参考方案5】:

很遗憾,trim() 没有跨浏览器 JavaScript 支持。

如果您不使用 jQuery(它有一个 .trim() 方法),您可以使用以下方法为字符串添加修剪支持:

String.prototype.trim = function() 
    return this.replace(/^\s+|\s+$/g,"");

String.prototype.ltrim = function() 
    return this.replace(/^\s+/,"");

String.prototype.rtrim = function() 
    return this.replace(/\s+$/,"");

【讨论】:

【参考方案6】:
var res = function(str)
    var ob; var oe;
    for(var i = 0; i < str.length; i++)
        if(str.charAt(i) != " " && ob == undefined)ob = i;
        if(str.charAt(i) != " ")oe = i;
    
    return str.substring(ob,oe+1);

【讨论】:

当你可以使用简单的替换时为什么要循环,当时间很关键时它也非常糟糕,尝试在平均大小文本上调用此方法 200 次并调用 jQuery 提供的其他实现,你'看看我在说什么:) 因为在某些情况下循环比正则表达式更快。请参阅 JW 在他的答案中发布的链接以获取一些基准,尤其是那里的 cmets(因为原始基准已经很老了)。【参考方案7】:

在尝试从输入中修剪一个值然后询问它是否等于空时,我遇到了类似的问题:

if ($(this).val().trim() == "")

然而,这给 IE6 - 8 的工作带来了麻烦。令人讨厌的是,我试图像这样改变它:

   var originalValue = $(this).val();

但是,使用 jQuery 的 trim 方法,在所有浏览器中都非常适合我..

var originalValueTrimmed = $.trim($(this).val());              
            if (originalValueTrimmed  == "")  ... 

【讨论】:

【参考方案8】:

刚刚发现 IE 停止支持trim(),可能是在最近的 Windows 更新之后。如果你使用dojo,你可以使用dojo.string.trim(),它可以跨平台工作。

【讨论】:

【参考方案9】:

jQuery:

$.trim( $("#mycomment").val() );

有人使用$("#mycomment").val().trim();,但这不适用于 IE。

【讨论】:

感谢您的完美回答,让我们在这个破旧、摇摇欲坠的旧浏览器桥上省了很多麻烦 :) 为什么 jQuery 的一个很好的例子。 这种方法可以跨浏览器吗,先生? @toha,跨浏览器是jQuery的关键之一 正确的先生。我猜。谢谢【参考方案10】:

我已经编写了一些代码来实现修剪功能。

LTRIM(向左修剪):

function ltrim(s)

    var l=0;
    while(l < s.length && s[l] == ' ')
       l++; 
    return s.substring(l, s.length);
 

RTRIM(右修剪):

function rtrim(s)

    var r=s.length -1;
    while(r > 0 && s[r] == ' ')
       r-=1;   
    return s.substring(0, r+1);
 

TRIM(修剪两边):

function trim(s)

    return rtrim(ltrim(s));

我们也可以使用正则表达式。

function trimStr(str) 
  return str.replace(/^\s+|\s+$/g, '');

Useful Explanation

【讨论】:

您的老式搜索和销毁代码无法处理 \t\r\n 等。只有spaces。如果您不想真正花精力手动处理所有事情,Regexp 会更好。【参考方案11】:

我在 IE9 中遇到了同样的问题 但是,当我在

之前的第一行使用以下标记声明支持的 html 版本时
<!DOCTYPE html>
<HTML>
<HEAD>...
.
.

问题已解决。

【讨论】:

【参考方案12】:

我们可以从网上获取官方代码! 参考这个:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim

在任何其他代码之前运行以下代码将创建 trim(),如果它本身不可用。

if (!String.prototype.trim) 
  (function() 
    // Make sure we trim BOM and NBSP
    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    String.prototype.trim = function() 
      return this.replace(rtrim, '');
    ;
  )();

更多: 我刚刚发现有一个支持 EcmaScript 5 的 js 项目: https://github.com/es-shims/es5-shim 通过阅读源码,我们可以得到更多关于trim的知识。

defineProperties(StringPrototype, 
 // http://blog.stevenlevithan.com/archives/faster-trim-javascript
 // http://perfectionkills.com/whitespace-deviations/
  trim: function trim() 
    if (typeof this === 'undefined' || this === null) 
      throw new TypeError("can't convert " + this + ' to object');
    
    return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
  
, hasTrimWhitespaceBug);

【讨论】:

【参考方案13】:

此问题可能是由 IE 在 Intranet 站点上使用兼容模式引起的。有两种方法可以解决这个问题,你可以在本地机器上更新 IE 以不使用兼容模式(在 IE11 中:工具-> 兼容性视图设置 -> 取消选中在兼容性视图中显示 Intranet 站点)

更好的是,您可以更新网页中的元标记。添加:

...
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...

这是什么意思?它告诉 IE 使用最新的兼容模式。更多信息请访问MSDN: Specifying legacy document modes

【讨论】:

【参考方案14】:

这是因为 getElementByID 拼写错误。将其更改为 getElementById

【讨论】:

以上是关于JavaScript 中的 .trim() 在 IE 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中Trim,TrimStart,TrimEnd的实现

在Javascript中为String对象添加trim,ltrim,rtrim

javascript 如何去掉空格

html JavaScript.html中的il metodo trim()

JavaScript中的trim自定义

JavaScript中trim 方法实现