.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