有没有办法在不运行 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/