首页 文章

JavaScript中的.trim()无法在IE中运行

提问于
浏览
454

我尝试将.trim()应用于我的一个JavaScript程序中的字符串 . 它在Mozilla下工作正常,但是当我在IE8中尝试它时会显示错误 . 有谁知道这里发生了什么?无论如何我可以在IE中使用吗?

代码:

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

错误显示:

Message: Object doesn't support this property or method
Line: 604
Char: 2
Code: 0
URI: http://test.localhost/test.js

14 回答

  • 4

    jQuery的:

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

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

  • 5

    添加以下代码以向字符串添加修剪功能 .

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

    看起来这个函数不是使用jQuery,你可以使用 $.trim()http://api.jquery.com/jQuery.trim/) .

  • 0

    遗憾的是,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+$/,"");
    }
    
  • 0
  • 12

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

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

    然而,这为IE6 - 8投入了一个扳手 . 令人讨厌的是,我试图将其变为如此:

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

    但是,使用jQuery的trim方法,适用于所有浏览器 .

    var originalValueTrimmed = $.trim($(this).val());              
                if (originalValueTrimmed  == "") { ... }
    
  • 201

    我编写了一些代码来实现修剪功能 .

    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));
    }
    

    OR

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

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

    Useful Explanation

  • 32

    我们可以从互联网上获取官方代码!请参考:

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

    在任何其他代码之前运行以下代码将创建trim(),如果它本身不可用 . if(!String.prototype.trim){
    (function(){
    //确保我们修剪BOM和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通过阅读源代码,我们可以获得更多关于修剪的知识 .

    defineProperties(StringPrototype,{
    // http://blog.stevenlevithan.com/archives/faster-trim-javascript
    // http://perfectionkills.com/whitespace-deviations/
    trim:function trim(){
    if(typeof this ==='undefined'|| this === null){
    抛出新的TypeError(“无法将此'转换为'对象');
    }
    return String(this).replace(trimBeginRegexp,'') . replace(trimEndRegexp,'');
    }
    },hasTrimWhitespaceBug);

  • 3

    我不是't think there'是JavaScript标准中的原生 trim() 方法 . 也许Mozilla提供一个,但如果你想在IE中使用一个,你需要自己编写 . this page上有几个版本 .

  • 8

    我在IE9中遇到了同样的问题但是当我在第一行之前声明支持的html版本时带有以下标记

    <!DOCTYPE html>
    <HTML>
    <HEAD>...
    .
    .
    

    问题解决了 .

  • 0
    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);
    }
    
  • 56

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

  • 3

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

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

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

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

  • 0

    这是因为拼写错误getElementBy ID . 将其更改为getElementById

相关问题