直来直去地说:
- 没有,jQuery有没有方法来检查是否选择是有效的。
- jQuery有很多正则表达式,所以你不能在代码中找到一个。
- 您不必为此编写一个巨大的正则表达式,答案更简单,如下所示。
我明白你的问题,因为我经历过,有些情况下你不能控制选择器给jQuery函数。
这个问题没有足够概括的是,如果选择器无效jQuery抛出一个错误(这很重要,因为这里是答案)。
实施例使用jQuery v1.9.1的:
$('##somewhere');
它记录到控制台以下行:
throw new Error("Syntax error, unrecognized expression: " + msg);
其源位于的jquery.js文件的4421行(非精缩和未压缩版本)。
因此,而不是寻找的jQuery的内部方法(它肯定可以简化事情,但不可用),你可以只听抛出建立错误,如果选择是有效的:
function isValidSelector(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
你也可以把它jQuery插件:
jQuery.extend({
isValidSelector: function(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
});
使用这种方式:
alert($.isValidSelector('#what?!?'));
此致敬礼。
编辑: 添加类型验证:选择器必须是字符串。 无论如何,这是一个部分解决方案,它不会为定义为不是基本类型的字符串对象var selector = new String('#@wrong-selector#!');
的选择器返回false。
为什么不传递实际的jQuery对象? '$('selector')'应该很容易检查... – 2011-06-08 18:18:21
@jcinacio:谢谢,但我实际上也在检查。我的目标是创建一个非常随意的参数。 – UpHelix 2011-06-08 18:25:02
'$('selector')'不适合这个目的,因为如果它无效,就会抛出一个错误。 – 2013-06-02 20:29:59