Sizzle セレクターを実行せずに検証する (正しく構築されていることを確認する) 方法はありますか?
2 に答える
7
Russ が言うように、Sizzle はセレクターを解釈するため、評価せずに検証することはできません。
ただし、Sizzle によってスローされた例外をキャッチして、セレクターが有効かどうかを判断できます。
function isSelectorValid(selector)
{
try {
$(selector);
} catch (x) {
return false;
}
return true;
}
ここでこのソリューションをテストできます。
編集:歴史のために、私の元の(そして過度に設計された)答えは次のとおりでした:
ただし、最後の解析操作のエラー ステータスからブール値を抽出するために、Sizzle のエラー管理を一時的にオーバーライドすることは可能です。$.find
次のソリューションは、jQuery が(これまでのところ) 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;
}
}
于 2011-05-10T16:36:17.813 に答える
0
そうではありません。Sizzle エンジンはコンパイルされていないため、セレクターの有効性を確認する唯一の方法は、セレクターを選択することです。
ただし、次のようなことができます。
var selector = ...construct your selector ...
if ($(selector).length > 0) {
// it worked.
}
于 2011-05-10T16:03:02.437 に答える