Как я могу определить, возвращает ли селектор null?
Каков наилучший способ определить, возвращает ли jQuery-селектор пустой объект. Если вы это сделаете:
alert($('#notAnElement'));
вы получаете [object Object], так что теперь я делаю это:
alert($('#notAnElement').get(0));
который будет писать «undefined», и поэтому вы можете сделать чек для этого. Но это кажется очень плохим. Какой другой способ?
- Тестирование, если флажок установлен с помощью jQuery
- Включение / выключение флажков
- jQuery scrollTop не работает в Chrome, но работает в Firefox
- Как получить доступ к свойствам стиля псевдоэлементов с помощью jQuery?
- Селекторы jQuery с переменными
- jQuery hasClass () - проверьте несколько classов
- : nth-of-type () в jQuery / Sizzle?
- поиск jQuery и контекст
- Как я могу получить идентификатор элемента с помощью jQuery?
- jQuery выбрать по classу VS выбрать по атрибуту
- Как выбрать элементы, которые не имеют определенного дочернего элемента с JQuery
- jQuery или CSS-селектор, чтобы выбрать все идентификаторы, начинающиеся с некоторой строки
- Случай селектора CSS для атрибутов
Моим любимым является расширение jQuery с помощью этого крошечного удобства:
$.fn.exists = function () { return this.length !== 0; }
Используется как:
$("#notAnElement").exists();
Более явный, чем использование длины.
if ( $("#anid").length ) { alert("element(s) found") } else { alert("nothing found") }
Селектор возвращает массив объектов jQuery. Если совпадающие элементы не найдены, он возвращает пустой массив. Вы можете проверить .length
коллекции, возвращаемую селектором, или проверить, не является ли первый элемент массива «неопределенным».
Вы можете использовать любые следующие примеры внутри оператора IF, и все они дают одинаковый результат. Правда, если селектор нашел соответствующий элемент, в противном случае false.
$('#notAnElement').length > 0 $('#notAnElement').get(0) !== undefined $('#notAnElement')[0] !== undefined
Мне нравится делать что-то вроде этого:
$.fn.exists = function(){ return this.length > 0 ? this : false; }
Итак, вы можете сделать что-то вроде этого:
var firstExistingElement = $('#iDontExist').exists() || //<-returns false; $('#iExist').exists() || //<-gets assigned to the variable $('#iExistAsWell').exists(); //<-never runs firstExistingElement.doSomething(); //<-executes on #iExist
Мне нравится использовать presence
, вдохновленное Ruby on Rails :
$.fn.presence = function () { return this.length !== 0 && this; }
Ваш пример:
alert($('#notAnElement').presence() || "No object found");
Я считаю, что он превосходит предлагаемые $.fn.exists
потому что вы все равно можете использовать логические операторы или if
, но полезный результат более полезен. Другой пример:
$ul = $elem.find('ul').presence() || $('').appendTo($elem) $ul.append('...')
Мои предпочтения, и я понятия не имею, почему это еще не в jQuery:
$.fn.orElse = function(elseFunction) { if (!this.length) { elseFunction(); } };
Используется следующим образом:
$('#notAnElement').each(function () { alert("Wrong, it is an element") }).orElse(function() { alert("Yup, it's not an element") });
Или, как он выглядит в CoffeeScript:
$('#notAnElement').each -> alert "Wrong, it is an element"; return .orElse -> alert "Yup, it's not an element"
Это в документации JQuery:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );