JavaScript 中的 .trim() 在 IE 中不起作用
Posted
技术标签:
【中文标题】JavaScript 中的 .trim() 在 IE 中不起作用【英文标题】:.trim() in JavaScript not working in IE 【发布时间】:2011-01-19 11:18:11 【问题描述】:我尝试将.trim()
应用于我的一个javascript 程序中的字符串。它在 Mozilla 下运行良好,但在 IE8 中尝试时显示错误。有谁知道这里发生了什么?无论如何我可以让它在IE中工作吗?
代码:
var ID = document.getElementByID('rep_id').value.trim();
错误显示:
消息:对象不支持此属性或方法 线路:604 字符:2 代码:0 URI:http://test.localhost/test.js
【问题讨论】:
我看不到您计算机上存储的内容。您可以将 test.js 上传到存储网站吗?另外,我需要查看实际的 trim() 函数以查看问题所在。谢谢! @ItzWarty"whatever ".trim()
在 IE8 上试试。
仅供参考:msdn.microsoft.com/en-us/library/ie/ff679971(v=vs.94).aspx
我在 Google 上搜索了 trim()
的 IE8 兼容性,当我发现它不受支持时我不敢相信自己的眼睛。感谢您清除它。我打算和你问的一样问。
【参考方案1】:
我认为 JavaScript 标准中没有原生的 trim()
方法。也许 Mozilla 提供了一个,但如果你想要一个在 IE 中,你需要自己编写它。 this page上有几个版本。
【讨论】:
【参考方案2】:https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim
这是对 javascript 的最新添加,IE 不支持它。
【讨论】:
【参考方案3】:在 IE 中似乎没有实现该功能。如果您使用的是 jQuery,则可以使用 $.trim()
代替(尽管自 jQuery 3.5 起已弃用)。
【讨论】:
现在,我喜欢 jQuery,但只为 .trim() 导入它似乎有点过分了 我同意。这就是为什么我说“如果你使用 jQuery ...”=) @Erik 这是 Jin 会遇到的唯一 IE 问题吗?无需使用库的浏览器清理功能,我就可以编写很多有用的 javascript。 请注意 $.trim() 与 $(添加以下代码为字符串添加修剪功能。
if(typeof String.prototype.trim !== 'function')
String.prototype.trim = function()
return this.replace(/^\s+|\s+$/g, '');
【讨论】:
好答案。请注意,replace(/^\s\s*/, '').replace(/\s\s*$/, '')
应该比 Firefox 2 中的 replace(/^\s+|\s+$/, '')
快大约 3 倍,根据一个基准测试:blog.stevenlevithan.com/archives/faster-trim-javascript
还要注意replace(/^\s+|\s+$/, '')
只删除前导或尾随空格,这不是修剪函数所期望的行为。如果要删除前导空格和尾随空格,则需要使用replace(/^\s+|\s+$/g, '')
。
对我来说似乎有点傻。不是每个 js 框架都提供了一个实用的 trim() 函数吗?如果这是您唯一遇到的问题,那很好,但是 IE 有很多“不同”的方式,这将使库在短期内值得。
@Stephen 是的,你是对的,但问题不在于框架。这是关于 javascript 和修剪的。
如果您不使用 jQuery,这是一个不错的解决方案。但如果不是,$.trim() 似乎是一个更好的解决方案,因为它可以让你的脚本更简单一些。【参考方案5】:
很遗憾,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+$/,"");
【讨论】:
【参考方案6】: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);
【讨论】:
当你可以使用简单的替换时为什么要循环,当时间很关键时它也非常糟糕,尝试在平均大小文本上调用此方法 200 次并调用 jQuery 提供的其他实现,你'看看我在说什么:) 因为在某些情况下循环比正则表达式更快。请参阅 JW 在他的答案中发布的链接以获取一些基准,尤其是那里的 cmets(因为原始基准已经很老了)。【参考方案7】:在尝试从输入中修剪一个值然后询问它是否等于空时,我遇到了类似的问题:
if ($(this).val().trim() == "")
然而,这给 IE6 - 8 的工作带来了麻烦。令人讨厌的是,我试图像这样改变它:
var originalValue = $(this).val();
但是,使用 jQuery 的 trim 方法,在所有浏览器中都非常适合我..
var originalValueTrimmed = $.trim($(this).val());
if (originalValueTrimmed == "") ...
【讨论】:
【参考方案8】:刚刚发现 IE 停止支持trim()
,可能是在最近的 Windows 更新之后。如果你使用dojo,你可以使用dojo.string.trim()
,它可以跨平台工作。
【讨论】:
【参考方案9】:jQuery:
$.trim( $("#mycomment").val() );
有人使用$("#mycomment").val().trim();
,但这不适用于 IE。
【讨论】:
感谢您的完美回答,让我们在这个破旧、摇摇欲坠的旧浏览器桥上省了很多麻烦 :) 为什么 jQuery 的一个很好的例子。 这种方法可以跨浏览器吗,先生? @toha,跨浏览器是jQuery的关键之一 正确的先生。我猜。谢谢【参考方案10】:我已经编写了一些代码来实现修剪功能。
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, '');
Useful Explanation
【讨论】:
您的老式搜索和销毁代码无法处理\t
、\r
、\n
等。只有spaces
。如果您不想真正花精力手动处理所有事情,Regexp 会更好。【参考方案11】:
我在 IE9 中遇到了同样的问题 但是,当我在
之前的第一行使用以下标记声明支持的 html 版本时<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
问题已解决。
【讨论】:
【参考方案12】:我们可以从网上获取官方代码! 参考这个:
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);
【讨论】:
【参考方案13】:此问题可能是由 IE 在 Intranet 站点上使用兼容模式引起的。有两种方法可以解决这个问题,你可以在本地机器上更新 IE 以不使用兼容模式(在 IE11 中:工具-> 兼容性视图设置 -> 取消选中在兼容性视图中显示 Intranet 站点)
更好的是,您可以更新网页中的元标记。添加:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...
这是什么意思?它告诉 IE 使用最新的兼容模式。更多信息请访问MSDN: Specifying legacy document modes
【讨论】:
【参考方案14】:这是因为 getElementByID 拼写错误。将其更改为 getElementById
【讨论】:
以上是关于JavaScript 中的 .trim() 在 IE 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript中Trim,TrimStart,TrimEnd的实现
在Javascript中为String对象添加trim,ltrim,rtrim