jQuery扩展接受String而不仅仅是Object

时间:2012-09-13 14:09:00

标签: javascript jquery

这可能是一个愚蠢的问题,但我似乎无法找到解决方案......

我只想制作 isNullOrWhiteSpace 扩展名(与.NET名称相同),以确定字符串是否为'', '0', 0, undefined, null。没什么了不起的。

现在使用典型的jQuery扩展程序,它似乎总是在寻找传入的jQuery Object 。但是在我的扩展中,我需要它来处理一个简单的字符串,但在我这样做时根本不起作用。

$.fn.isNullOrWhiteSpace = function () {
    if (['', '0', 0, undefined, null].indexOf($.trim(this)) > -1) {
        return false;
    }
    return true;
};

'testing'.isNullOrWhiteSpace(); // doesn't work
// Uncaught TypeError: Object has no method 'isNullOrWhiteSpace'

我在这里缺少什么?

- 从下面的答案来看,结果应该是:

$.isNullOrWhiteSpace $.fn.部分使其成为jQuery-Object扩展,而不仅仅是常规扩展(例如$.isArray()$.trim() (我在自己的问题中使用......叹息))

4 个答案:

答案 0 :(得分:3)

如果你必须将它挂钩到jQuery - 并且没有理由超越命名空间经济 - 你会这样做:

$.nullOrWhitespace = function(s) {
  return !s || !(s.replace(/\s*/, '')); // or something like this; just an example
};

然后用

调用它
if ( $.nullOrWhitespace( yourString ) ) {
  ... whatever ...
}

答案 1 :(得分:1)

尝试String.prototype.isNullOrWhiteSpace = function() {...

答案 2 :(得分:1)

据我所知,$.fn.isNullOrWhiteSpace扩展了jQuery。

如果要扩展jQuery,则需要在jQuery对象上调用该方法。

'testing'是一个字符串,但$('testing')将是一个jQuery对象。

这似乎有效:

$.fn.isNullOrWhiteSpace = function () {
    if (['', '0', 0, undefined, null].indexOf($.trim(this.selector)) > -1) {
        return false;
    }
    return true;
};

alert($('').isNullOrWhiteSpace());
alert($('testing').isNullOrWhiteSpace());

DEMO

答案 3 :(得分:1)

$.fn默认情况下将this的上下文设置为匹配元素数组(与选择器一起使用时)。在这种情况下你显然不需要。

$.isNullOrWhiteSpace = function (str) {        
     return $.inArray($.trim(str), ['', '0', 0, undefined, null]) > -1;
};

这就是大多数其他实用方法所做的事情,例如:$.inArray$.trim就像我们已经使用过的那样! :)