Ну, как говорит Расс, поскольку 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;
}
}
Это можно считать ужасным взломом, но это работает: вы можете проверить его здесь .