首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法验证Sizzle选择器?

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

Stack Overflow用户
提问于 2011-05-10 23:52:15
回答 2查看 798关注 0票数 6

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-11 00:36:18

嗯,正如Russ所说,因为Sizzle解释选择器,所以如果不计算它,它就无法验证它。

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

代码语言:javascript
复制
function isSelectorValid(selector)
{
    try {
        $(selector);
    } catch (x) {
        return false;
    }
    return true;
}

您可以测试此解决方案here

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

但是,可以临时覆盖Sizzle的错误管理,以便从其最后一次解析操作的错误状态中提取布尔值。以下解决方案利用了jQuery通过$.find公开Sizzle这一事实:

代码语言:javascript
复制
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对其进行测试。

票数 7
EN

Stack Overflow用户

发布于 2011-05-11 00:03:02

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

但是,您可以这样做:

代码语言:javascript
复制
var selector = ...construct your selector ...
if ($(selector).length > 0) {
 // it worked.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5952853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档