javascript - 确定一个字符串是否是一个有效的 jQuery 选择器?

标签 javascript jquery jquery-selectors

jQuery 是否有一种方法来确定传递给函数的参数是否为选择器?

我正在为一些 jQuery 插件制作模板,我需要能够检查传入的参数是否是 jQuery 选择器。我想允许其他数据类型并根据传递的数据类型执行不同的方法。检测数据类型很容易,但选择器只是一个字符串,可以用多种不同的方式构造。

我的目标是创建插件,这些插件可以容忍您为参数传递的内容,并就如何处理它做出有根据的决定。以 jQuery UI 插件为例,在某些插件中,假设我们在参数占位符中传递一个回调函数,该回调函数用于速度的数字,它仍然接受回调并运行它并使用默认速度。这就是我想要的那种功能,选择器是一个非常独特的案例。

jQuery 是否为此编写了正则表达式?我在代码中找不到。

如果没有,我想我只需要为此编写一个巨大的正则表达式?

最佳答案

进入正题:

  1. 不,jQuery 没有检查选择器是否有效的方法。
  2. jQuery 有很多正则表达式,这就是为什么您在代码中找不到一个的原因。
  3. 您不必为此编写庞大的正则表达式,答案更简单,如下所示。

我理解你的问题,因为我经历过,在某些情况下你无法控制提供给 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/

相关文章:

jquery - 阻止用户使用 Enter 提交表单,但在一个表单输入字段上启用 Enter 键

javascript - jQuery 插件上的 Click Function 只允许单击

javascript - 如何使用 jQuery 删除 UL 中的 HTML 元素?

jQuery - 如何在完成页面加载之前删除 DOM 元素

c# - "Access denied"尝试在客户端打开文件时

jquery - 从下拉列表中复制选项列表。查询

javascript - PHP 表单使用 AJAX 传递发布数据

javascript - JQuery:如何获取选定的单选按钮值?

javascript - 使用 LocalStorage 检测重新访问者

javascript - 从服务器返回的 Backbone 模型中获取属性