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

我试图在我的一个JavaScript程序中应用.trim()到字符串。它在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
231305 次浏览

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

看起来这个函数在IE中没有实现。如果你正在使用jQuery,你可以使用$.trim()来代替(尽管它在jQuery 3.5已经被弃用)。

添加以下代码向字符串添加修饰功能。

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

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

当我试图从输入中修剪一个值,然后问它是否等于零时,我有类似的问题:

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

然而,这给IE6 - 8的工作带来了麻烦。令人恼火的是,我试图这样var它:

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

然而,使用jQuery的修剪方法,在所有浏览器中完美地为我工作。

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

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

jQuery:

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

有人使用$("#mycomment").val().trim();,但这将无法在IE上工作。

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

LTRIM(修剪左):

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

空白(右):

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

修剪(修剪两边):

function trim(s)
{
return rtrim(ltrim(s));
}

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

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

我在IE9中遇到了同样的问题 然而,当我在

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

问题解决了。

我们可以从网上得到官方代码! 参考:< / p >

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, '');
};
})();
}
< p >更多: 我刚刚发现有一个支持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);

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

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

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

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

这是因为输入错误getElementByID。将其更改为getElementById