有没有一种方法可以在不运行Sizzle选择器的情况下验证(验证其构造是否正确)?
发布于 2011-05-11 00:36:18
嗯,正如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对其进行测试。
发布于 2011-05-11 00:03:02
不完全是,Sizzle引擎没有编译,所以检查选择器有效性的唯一方法就是选择它。
但是,您可以这样做:
var selector = ...construct your selector ...
if ($(selector).length > 0) {
// it worked.
}https://stackoverflow.com/questions/5952853
复制相似问题