我试图.trim()
在我的一个 JavaScript 程序中应用到一个字符串。它在 Mozilla 下运行良好,但在 IE8 中尝试时显示错误。有谁知道这里发生了什么?无论如何我可以让它在IE中工作吗?
代码:
var ID = document.getElementByID('rep_id').value.trim();
错误显示:
消息:对象不支持此属性或方法 线路:604 字符:2 代码:0 URI:http://test.localhost/test.js
我试图.trim()
在我的一个 JavaScript 程序中应用到一个字符串。它在 Mozilla 下运行良好,但在 IE8 中尝试时显示错误。有谁知道这里发生了什么?无论如何我可以让它在IE中工作吗?
var ID = document.getElementByID('rep_id').value.trim();
消息:对象不支持此属性或方法 线路:604 字符:2 代码:0 URI:http://test.localhost/test.js
添加以下代码以向字符串添加修剪功能。
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, '');
}
我们可以从网上获取官方代码!参考这个:
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);
我认为trim()
JavaScript 标准中没有本地方法。也许 Mozilla 提供了一个,但如果你想要一个在 IE 中,你需要自己编写它。此页面上有几个版本。
我在 IE9 中遇到了同样的问题但是,当我在之前的第一行使用以下标记声明支持的 html 版本时
<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
问题已解决。
这是因为拼写错误 getElementBy ID。将其更改为 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 中:工具-> 兼容性视图设置 -> 取消选中在兼容性视图中显示 Intranet 站点)
更好的是,您可以更新网页中的元标记。加入:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...
这是什么意思?它告诉 IE 使用最新的兼容模式。MSDN中提供了更多信息:指定旧文档模式