Есть ли способ проверить селектор Sizzle? - PullRequest
5 голосов
/ 10 мая 2011

Есть ли способ проверить (убедиться, что он сконструирован правильно) селектор Sizzle без его запуска?

Ответы [ 2 ]

7 голосов
/ 10 мая 2011

Ну, как говорит Расс, поскольку Sizzle интерпретирует селектор, он не может проверить его, не оценив его.

Однако вы можете поймать исключение, выданное Sizzle, чтобы определить, действителен ли селектор:

function isSelectorValid(selector)
{
    try {
        $(selector);
    } catch (x) {
        return false;
    }
    return true;
}

Вы можете проверить это решение здесь .


РЕДАКТИРОВАТЬ: Ради истории, мой оригинал (и сверх силовой)Ответ был:

Однако возможно временно переопределить управление ошибками Sizzle, чтобы извлечь логическое значение из состояния ошибки его последней операции анализа.Следующее решение использует тот факт, что jQuery выставляет Sizzle через $.find (пока):

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;
    }
}

Это можно считать ужасным взломом, но это работает: вы можете проверить его здесь .

0 голосов
/ 10 мая 2011

Не совсем, движок Sizzle не скомпилирован, поэтому единственный способ проверить достоверность селектора - выбрать его.

Однако вы можете сделать что-то вроде этого:

var selector = ...construct your selector ...
if ($(selector).length > 0) {
 // it worked.
}
...