Проверка, является ли объект jQuery-объектом
Вопрос: Как быстро проверить, является ли объект объектом jQuery или нативным объектом JavaScript?
У меня есть следующий код:
var o = {};
var e = $('#element');
function doStuff(o) {
if (o.selector) {
console.log('object is jQuery');
}
}
doStuff(o);
doStuff(e);
Явно, что код выше работает, но он не безопасен. Потенциально можно добавить ключ selector к объекту o, и результат будет таким же. Есть ли лучший способ убедиться, что объект действительно является объектом jQuery?
Что-то в духе (typeof obj == 'jquery').
4 ответ(ов)
Вам также может быть полезно использовать свойство .jquery, как описано здесь: http://api.jquery.com/jquery-2/
var a = { what: "Обычный объект JS" },
b = $('body');
if (a.jquery) { // ложное, так как оно неопределено
alert(' a - это объект jQuery! ');
}
if (b.jquery) { // истинное, так как это объект jQuery
alert(' b - это объект jQuery! ');
}
В данном коде мы создаём обычный объект a и объект jQuery b, который представляет элемент <body>. Первое условие проверяет наличие свойства jquery у объекта a, и оно будет ложным, так как объект a не является jQuery объектом. Второе условие проверяет наличие свойства jquery у объекта b и будет истинным, так как b является jQuery объектом.
Если вы хотите определить, является ли объект объектом jQuery, но у вас не установлен jQuery, вы можете использовать следующий код:
function isJQuery(obj) {
// Все объекты jQuery имеют атрибут, который содержит версию jQuery.
return typeof obj === "object" && obj != null && obj.jquery != null;
}
Этот фрагмент кода проверяет, является ли переданный объект не нулем, и имеет ли он свойство jquery, что позволяет сделать вывод о том, что это именно jQuery-объект.
Данный код проверяет, является ли el экземпляром jQuery. Если это так, то функция возвращает true, если размер объекта больше нуля, что указывает на наличие элементов в объекте jQuery. Если же el не является экземпляром jQuery, проверяется, существует ли объект и имеет ли он свойство tagName (что указывает на то, что это DOM-элемент). В конечном итоге, возвращается true, если el — это валидный DOM-элемент, и false в противном случае.
Вот переведенный код с объяснением:
return el instanceof jQuery ? el.size() > 0 : (el && el.tagName);
Если el — это jQuery объект, то возвратится true, если в нем есть элементы. Если el — это HTML элемент, то функция проверит его существование, и если он существует, то функция вернет его tagName. Если ни одно из условий не выполнено, возвратится false.
Вы можете проверить, является ли объект созданным jQuery, с помощью свойства jquery:
myObject.jquery // 3.3.1
⇒ Если объект был создан jQuery, то это вернет номер версии jQuery.
⇒ В противном случае вернется undefined.
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
Как определить нажатие клавиши Esc?
Как получить данные формы с помощью JavaScript/jQuery?
Как выполнить код после сброса HTML-формы с помощью jQuery?