Чтобы перейти прямо к делу:
- Нет, у jQuery нет способа проверить, является ли селектор действительным.
- В jQuery есть много Regex ', поэтомуВы не можете найти one в коде.
- Вам не нужно писать огромное регулярное выражение для этого, ответ проще, как показано ниже.
Я понимаю вашу проблему, потому что я столкнулся с ней, есть случаи, когда вы не управляете селектором, передаваемым функции jQuery.
Проблема, недостаточно изложенная в том, что если селектор недействителен jQuery выдает ошибку (это важно, потому что здесь ответ).
Пример использования jQuery v1.9.1:
$('##somewhere');
Он регистрирует в консоли следующую строку:
throw new Error( "Syntax error, unrecognized expression: " + msg );
источник которого находится в строке 4421 файла jQuery.js (версия без сжатия и без сжатия).
Таким образом, вместо поиска внутреннего метода jQuery (которыйможет, конечно, упростить вещи, но не доступен), вы можете просто перечислитьru Ошибка, выдаваемая для определения допустимости селектора:
function isValidSelector(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
Вы также можете сделать его плагином jQuery:
jQuery.extend({
isValidSelector: function(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
});
для использования таким образом:
alert($.isValidSelector('#what?!?'));
С уважением.
РЕДАКТИРОВАТЬ: добавлена проверка типа: селектор должен быть строкой.В любом случае это частичное решение, оно не возвращает false для селекторов, определенных как строковые объекты var selector = new String('#@wrong-selector#!');
, которые не являются примитивным типом.