jQuery 是否有一种方法来确定传递给函数的参数是否为选择器?
我正在为一些 jQuery 插件制作模板,我需要能够检查传入的参数是否是 jQuery 选择器。我想允许其他数据类型并根据传递的数据类型执行不同的方法。检测数据类型很容易,但选择器只是一个字符串,可以用多种不同的方式构造。
我的目标是创建插件,这些插件可以容忍您为参数传递的内容,并就如何处理它做出有根据的决定。以 jQuery UI 插件为例,在某些插件中,假设我们在参数占位符中传递一个回调函数,该回调函数用于速度的数字,它仍然接受回调并运行它并使用默认速度。这就是我想要的那种功能,选择器是一个非常独特的案例。
jQuery 是否为此编写了正则表达式?我在代码中找不到。
如果没有,我想我只需要为此编写一个巨大的正则表达式?
最佳答案
进入正题:
- 不,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,这不是原始类型。
关于javascript - 确定一个字符串是否是一个有效的 jQuery 选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283255/