【发布时间】:2010-05-23 06:45:07
【问题描述】:
这在 FireFox 中运行良好: $("#listname").val().trim()
但在 safari 中它会出错: $("#listname").val().trim() 虽然这确实有效,但 $("#listname").val()
这是为什么呢?
【问题讨论】:
标签: jquery firefox safari trim
这在 FireFox 中运行良好: $("#listname").val().trim()
但在 safari 中它会出错: $("#listname").val().trim() 虽然这确实有效,但 $("#listname").val()
这是为什么呢?
【问题讨论】:
标签: jquery firefox safari trim
字符串上没有内在的trim 函数。 jQuery 确实定义了$.trim,但你可以这样使用它:
$.trim($("#listname").val())
例如,您将字符串传递给它,而不是从 String 上的属性调用它。
正如另一个回答者提到的,如果你愿意,你可以将它添加到所有字符串中(尽管我会利用 jQuery 的函数而不是我自己的正则表达式,因为浏览器中的 Unicode 变幻莫测):
if (!String.prototype.trim) {
String.prototype.trim = (function() {
function String_trim() {
return jQuery.trim(this);
}
return String_trim;
})();
}
我在那里使用了一个命名函数 (I always use named functions),但如果您不介意的话,您可以使用更少的代码行:
if (!String.prototype.trim) {
String.prototype.trim = function() {
return jQuery.trim(this);
};
}
【讨论】:
这是因为trim 没有在所有浏览器的String 类型上定义。它不是jQuery 函数。你可以define the prototype 它应该可以工作:
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+$/,"");
}
【讨论】:
\s 在某些实现中就会出现错误,更多信息请参见:perfectionkills.com/whitespace-deviations jQuery 的函数只处理其中一个,但是...