Ответы:
Проверьте jQuery FAQ ...
Вы можете использовать свойство length коллекции jQuery, возвращаемой вашим селектором:
if ( $('#myDiv').length ){}
lenght
вместо length
; это орфографическая ошибка
.length
.
(Поскольку у меня, кажется, недостаточно репутации, чтобы проголосовать за ответ ...)
Волк написал:
Вызов свойства length для неопределенного или нулевого объекта приведет к сбою браузеров IE и webkit!
Вместо этого попробуйте это:
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") !== null){ // do something }
или
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") === null){ // don't do something }
Хотя верно, что вызов свойства length для неопределенного или нулевого объекта приведет к сбою браузеров, результат работы селекторов jQuery ($ ('...')) никогда не будет нулевым или неопределенным. Таким образом, предложения кода не имеют смысла. Используйте один из других ответов, они имеют больше смысла.
(Обновление 2012 г.) Поскольку люди смотрят на код, и этот ответ довольно высок в списке: последние пару лет я использовал этот небольшой плагин:
jQuery.fn['any'] = function() {
return (this.length > 0);
};
Я думаю, что $ ('div'). Any () читается лучше, чем $ ('div'). Length , плюс вы не будете так сильно страдать от опечаток: $ ('div'). Ayn () выдаст ошибку времени выполнения , $ ('div'). длина будет молча, скорее всего, всегда будет ложной.
__
редактирует ноябрь 2012:
1) Поскольку люди склонны смотреть на код, а не читать то, что говорится вокруг кода, я добавил две большие заметки лектора предостережения в цитируемый код Wolf.
2) Я добавил код небольшого плагина, который я использую для этой ситуации.
Функция поиска возвращает массив совпадающих элементов. Вы можете проверить, равна ли длина нулю. Обратите внимание на изменение, чтобы искать элементы только один раз и использовать результаты по мере необходимости.
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
Кроме того, вы пытались просто использовать текстовую функцию - если элемент не существует, он ничего не будет делать.
$("#btext" + i).text("Branch " + i);
Функция jquery $ () всегда возвращает ненулевое значение - средние элементы соответствуют выбранному вами селектору. Если элемент не был найден, он вернет пустой массив. Так что ваш код будет выглядеть примерно так:
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
В jQuery 1.4 вы получаете функцию $ .isEmptyObject, но если вы вынуждены использовать более старую версию jQ, как мы, бедные разработчики Drupal, просто украдем этот код:
// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
Используйте это как:
console.log(isObjectEmpty(the_object)); // Returns true or false.
Независимо от того, что вы выбрали, функция $()
всегда возвращает объект jQuery, чтобы его нельзя было использовать для тестирования. Лучший способ (если не единственный) - использовать size()
функцию или свойство собственной длины, как описано выше.
if ( $('selector').size() ) {...}
if ( $('#whatever')[0] ) {...}
Объект jQuery, который возвращается всеми нативными методами jQuery, НЕ является массивом, это объект со многими свойствами; один из них является свойством длины. Вы также можете проверить size () или get (0) или get () - 'get (0)' работает так же, как и доступ к первому элементу, то есть $ (elem) [0]
А как насчет использования "undefined"?
if (value != undefined){ // do stuff }
используйте $("#selector").get(0)
для проверки с нулевым, как это. get возвращает элемент dom, пока вы не обработаете массив, где вам нужно проверить свойство length. Лично мне не нравится проверка длины для нулевой обработки, она почему-то меня смущает :)
Используя свойство length, вы можете сделать это.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}