javascript - 有没有办法验证 Sizzle 选择器?

标签 javascript jquery sizzle

有没有办法在不运行 Sizzle 选择器的情况下验证(验证其构造是否正确)?

最佳答案

好吧,正如 Russ 所说,由于 Sizzle 解释了选择器,所以它无法在不评估它的情况下对其进行验证。

但是,您可以捕获 Sizzle 抛出的异常以确定选择器是否有效:

function isSelectorValid(selector)
{
    try {
        $(selector);
    } catch (x) {
        return false;
    }
    return true;
}

您可以测试此解决方案 here .


编辑:为了历史起见,我原来的(过度设计的)答案是:

但是,可以暂时覆盖 Sizzle 的错误管理,以便从其最后一次解析操作的错误状态中提取 bool 值。以下解决方案利用了 jQuery 通过 $.find(到目前为止)公开 Sizzle 的事实:

function isSelectorValid(selector)
{
    var oldErrorMethod = $.find.error;
    try {
        $.find.error = function(msg) {
            valid = false;
            oldErrorMethod(msg);
        };
        $(selector);
        return true;
    } catch (x) {
        return false;
    } finally {
        $.find.error = oldErrorMethod;
    }
}

这可以说是一个可怕的 hack,但它有效:你可以测试它 here .

关于javascript - 有没有办法验证 Sizzle 选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952853/

相关文章:

javascript - 选择没有 jQuery 的所有链接和表单

javascript - Three.js 带摄像头选择对象,无鼠标

javascript - JavaScript 中的 try-catch : how to get stack trace or line number of the original error

php - 当使用 while 循环选中复选框时,如何将文本框值复制到另一个文本框?

javascript - 在查询中自动将节点添加到 href 并取消默认

javascript - jquery 背景动画与#anchor 冲突

jquery - 下一个 sibling 选择器的逆

Javascript forEach 返回值插入字符串

javascript - 使用 Diffie-Hellman key 交换和 AES 通过 HTTP 进行客户端加密

css - Prototype 1.7 - 属性选择器坏了?