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

时间:2011-05-10 15:52:15

标签: javascript jquery sizzle

有没有办法验证(验证它的构造是否正确)一个Sizzle选择器而不运行它?

2 个答案:

答案 0 :(得分:7)

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

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

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

您可以测试此解决方案here


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

但是,可以暂时覆盖Sizzle的错误管理,以便从其上一次解析操作的错误状态中提取布尔值。以下解决方案利用了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;
    }
}

这可以说是一个可怕的黑客攻击,但它确实有效:你可以测试它here

答案 1 :(得分:0)

不完全是,Sizzle引擎没有编译,因此检查选择器有效性的唯一方法就是选择它。

但是,您可以这样做:

var selector = ...construct your selector ...
if ($(selector).length > 0) {
 // it worked.
}