我尝试将 .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
"whatever ".trim()
在 IE8 上试试。
trim()
的 IE8 兼容性,当我发现它不受支持时简直不敢相信。感谢您清除它。我正要问和你问的一样。
添加以下代码以向字符串添加修剪功能。
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
看起来这个功能没有在 IE 中实现。如果您使用的是 jQuery,则可以改用 $.trim()
(尽管自 jQuery 3.5 起已弃用它)。
jQuery:
$.trim( $("#mycomment").val() );
有人使用 $("#mycomment").val().trim();
,但这不适用于 IE。
不幸的是,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+$/,"");
}
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim
这是对 javascript 的最新添加,IE 不支持它。
在尝试从输入中修剪一个值然后询问它是否等于无时,我遇到了类似的问题:
if ($(this).val().trim() == "")
然而,这给 IE6 - 8 的工作带来了麻烦。令人讨厌的是,我试图像这样改变它:
var originalValue = $(this).val();
但是,使用 jQuery 的 trim 方法,在所有浏览器中都非常适合我..
var originalValueTrimmed = $.trim($(this).val());
if (originalValueTrimmed == "") { ... }
我已经编写了一些代码来实现修剪功能。
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, '');
}
\t
、\r
、\n
等。只有 spaces
。如果您不想真正努力手动处理所有事情,Regexp 会更好。
我们可以从网上获取官方代码!参考这个:
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通过阅读源代码,我们可以获得更多关于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);
我在 IE9 中遇到了同样的问题但是,当我在之前的第一行使用以下标记声明支持的 html 版本时
<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
问题已解决。
这是因为拼写错误 getElementByID。将其更改为 getElementById
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 在 Intranet 站点上使用兼容模式引起的。有两种方法可以解决这个问题,您可以更新 IE 以在本地机器上不使用兼容模式(在 IE11 中:工具-> 兼容性视图设置-> 取消选中在兼容性视图中显示内网站点)
更好的是,您可以更新网页中的元标记。加入:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...
这是什么意思?它告诉 IE 使用最新的兼容模式。 MSDN: Specifying legacy document modes 中提供了更多信息
replace(/^\s\s*/, '').replace(/\s\s*$/, '')
应该比replace(/^\s+|\s+$/, '')
快 3 倍:blog.stevenlevithan.com/archives/faster-trim-javascriptreplace(/^\s+|\s+$/, '')
仅删除前导空格或尾随空格,这不是修剪函数所期望的行为。如果要删除前导空格和尾随空格,则需要使用replace(/^\s+|\s+$/g, '')
。