.trim()在JavaScript中不能在IE中工作

我试图将.trim()到我的一个JavaScript程序中的string。 它在Mozilla下工作正常,但是当我在IE8中尝试时显示错误。 有人知道这里发生了什么? 无论如何,我可以让它在IE浏览器工作吗?

码:

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

错误显示:

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

添加下面的代码以将修剪function添加到string。

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

看起来这个function在IE中没有实现。 如果您使用jQuery,则可以使用$.trim()http://api.jquery.com/jQuery.trim/ )。

jQuery的:

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

有人使用$("#mycomment").val().trim(); 但是这对IE不起作用。

不幸的是,没有跨trim()的浏览器JavaScript支持。

如果您不使用jQuery(具有.trim()方法),则可以使用以下方法向string添加修剪支持:

 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+$/,""); } 

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

这是一个相当新近的JavaScript,并不支持IE。

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

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

然而,这在IE6 – 8的作品中扔了一个扳手。令人讨厌的是我试图把它变成这样:

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

所以我使用jQuery的修剪方法,这在所有浏览器中完美地适用于我…

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

我写了一些代码来实现修剪function。

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

要么

我们可以使用正则expression式。

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

有用的解释

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

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

在任何其他代码之前运行以下代码将创buildtrim()(如果它不是本地可用的)。

 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, ''); }; })(); } 

更多:我只是发现有js项目支持EcmaScript 5: 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) { throw new TypeError("can't convert " + this + ' to object'); } return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, ''); } }, hasTrimWhitespaceBug); 

我不认为JavaScript标准中有一个本地trim()方法。 也许Mozilla提供了一个,但是如果你想在IE中使用一个,你需要自己编写它。 这个页面上有几个版本。

我在IE9中有同样的问题但是,当我声明支持的HTML版本与第一行之前的以下标记

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

问题解决了。

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

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

内部网站上使用兼容模式的IE可能导致此问题。 有两种方法可以解决这个问题,您可以更新IE在本地机器上不使用兼容模式(在IE11中:工具 – >兼容性视图设置 – >取消选中在兼容性视图中显示内部网站点)

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

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

这是什么意思? 它告诉IE使用最新的兼容模式。 更多信息在MSDN中可用:指定传统文档模式

这是因为打字错误getElementBy ID 。 将其更改为getElementById