我尝试将.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
答案 0 :(得分:767)
添加以下代码以向字符串添加修剪功能。
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
答案 1 :(得分:202)
看起来IE中没有实现该功能。如果您使用的是jQuery,则可以使用$.trim()
代替http://api.jquery.com/jQuery.trim/)。
答案 2 :(得分:57)
jQuery的:
$.trim( $("#mycomment").val() );
有人使用$("#mycomment").val().trim();
,但这不适用于IE。
答案 3 :(得分:33)
不幸的是,没有针对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+$/,"");
}
答案 4 :(得分:12)
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim
这是javascript的最新补充,IE不支持。
答案 5 :(得分:8)
当我尝试从输入中修剪一个值然后询问它是否等于什么时,我遇到了类似的问题:
if ($(this).val().trim() == "")
然而,这为IE6 - 8投入了一个扳手。令人讨厌的是,我试图将其改为:
var originalValue = $(this).val();
然而,使用jQuery的trim方法,在所有浏览器中都适合我。
var originalValueTrimmed = $.trim($(this).val());
if (originalValueTrimmed == "") { ... }
答案 6 :(得分:5)
我已经编写了一些代码来实现修剪功能。
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, '');
}
答案 7 :(得分:4)
我们可以从互联网上获取官方代码! 请参阅:
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 通过阅读源代码,我们可以获得更多关于修剪的知识。
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);
答案 8 :(得分:3)
我认为JavaScript标准中没有本地trim()
方法。也许Mozilla提供一个,但如果你想在IE中使用一个,你需要自己编写。 this page上有几个版本。
答案 9 :(得分:3)
我在IE9中遇到了同样的问题 但是,当我在
之前的第一行声明支持的html版本时带有以下标记<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
问题已解决。
答案 10 :(得分: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);
}
答案 11 :(得分:0)
刚刚发现IE停止支持trim()
,可能是在最近的Windows更新之后。如果你使用dojo,你可以使用dojo.string.trim()
,它可以跨平台工作。
答案 12 :(得分:0)
此问题可能是由IE在Intranet站点上使用兼容模式引起的。有两种方法可以解决此问题,您可以将IE更新为不在本地计算机上使用兼容模式(在IE11中:工具 - &gt;兼容性视图设置 - &gt;取消选中在兼容性视图中显示Intranet网站)
更好的是,您可以更新网页中的元标记。加入:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...
这是什么意思?它告诉IE使用最新的兼容模式。有关详细信息,请参阅MSDN: Specifying legacy document modes
答案 13 :(得分:0)
这是因为拼写错误getElementBy ID 。将其更改为getElementById