1

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

我只是想做一个isNullOrWhiteSpace扩展(与 .NET 同名),以确定字符串是否为'', '0', 0, undefined, null. 没什么疯狂的。

现在用一个典型的 jQuery 扩展来做这件事,它似乎总是在寻找一个 jQuery对象来传递。但是在我的扩展中,我需要它来处理一个简单的字符串,但是当我使用它时它根本不起作用做。

$.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

4 回答 4

3

如果你必须把它与 jQuery 挂钩——而且真的没有理由超越命名空间经济——你可以这样做:

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

然后调用它

if ( $.nullOrWhitespace( yourString ) ) {
  ... whatever ...
}
于 2012-09-13T14:13:17.940 回答
1

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

于 2012-09-13T14:12:21.137 回答
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());

演示

于 2012-09-13T14:14:02.627 回答
1

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

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

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

于 2012-09-13T14:15:10.437 回答