这可能是一个愚蠢的问题,但我似乎无法找到解决方案......
我只想制作 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()
(我在自己的问题中使用......叹息))
答案 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());
答案 3 :(得分:1)
$.fn
默认情况下将this
的上下文设置为匹配元素数组(与选择器一起使用时)。在这种情况下你显然不需要。
$.isNullOrWhiteSpace = function (str) {
return $.inArray($.trim(str), ['', '0', 0, undefined, null]) > -1;
};
这就是大多数其他实用方法所做的事情,例如:$.inArray
,$.trim
就像我们已经使用过的那样! :)