6

Sizzle セレクターを実行せずに検証する (正しく構築されていることを確認する) 方法はありますか?

4

2 に答える 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 に答える