Как я могу определить, возвращает ли селектор null?

Каков наилучший способ определить, возвращает ли jQuery-селектор пустой объект. Если вы это сделаете:

alert($('#notAnElement')); 

вы получаете [object Object], так что теперь я делаю это:

 alert($('#notAnElement').get(0)); 

который будет писать «undefined», и поэтому вы можете сделать чек для этого. Но это кажется очень плохим. Какой другой способ?

Моим любимым является расширение 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 

http://jsfiddle.net/vhbSG/

Мне нравится использовать 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' ); 
  • Выберите элемент, когда имя classа начинается с определенного слова
  • Выбор элементов с определенным цветом фона
  • Выбрать элемент по точному соответствию его содержимому
  • Установите опцию выбора «selected», по значению
  • Имя атрибута jQuery содержит
  • Доступ к css ": после" селектор с jQuery
  • Выбор индекса jQuery
  • Элемент или class LIKE для jQuery?
  • jQuery выбирает атрибут с использованием операторов AND и OR
  • Получить список отмеченных флажков в div с помощью jQuery
  • Является ли jQuery каким-либо кэшированием «селекторов»?
  • Давайте будем гением компьютера.