【问题标题】:Why does Safari not like the .trim() in JQUERY?为什么 Safari 不喜欢 JQUERY 中的 .trim()?
【发布时间】:2010-05-23 06:45:07
【问题描述】:

这在 FireFox 中运行良好: $("#listname").val().trim()

但在 safari 中它会出错: $("#listname").val().trim() 虽然这确实有效,但 $("#listname").val()

这是为什么呢?

【问题讨论】:

    标签: jquery firefox safari trim


    【解决方案1】:

    字符串上没有内在的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);
        };
    }
    

    【讨论】:

    • 哦,我会被打扰的!为什么要命名你永远不会再提及的东西......? (+1 原型 sol'n)
    • @Mark:关于我的全部理由,请参阅链接。 :-) 但基本上:因为我想在错误、调用堆栈、断点列表等中看到有用的名称,等等等等。虽然这个特殊情况非常简单,但似乎每次我想“哦,这太简单了,懒得去做”它回来咬我。
    【解决方案2】:

    这是因为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+$/,"");
    }
    

    【讨论】:

    • +1 请注意,一旦您进入非 ASCII 空格,\s 在某些实现中就会出现错误,更多信息请参见:perfectionkills.com/whitespace-deviations jQuery 的函数只处理其中一个,但是...
    猜你喜欢
    • 2011-05-17
    • 2015-08-06
    • 2021-10-15
    • 2016-11-04
    • 2012-10-25
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多