Как проверить нулевые объекты в jQuery - PullRequest
162 голосов
/ 25 января 2009

Я использую jQuery и хочу проверить наличие элемента на моей странице. Я написал следующий код, но он не работает:

if($("#btext" + i) != null) {
    //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}

Как проверить наличие элемента?

Ответы [ 13 ]

245 голосов
/ 25 января 2009

Проверьте jQuery FAQ ...

Вы можете использовать свойство length коллекции jQuery, возвращаемое вашим селектором:

if ( $('#myDiv').length ){}
59 голосов
/ 17 января 2011

(Поскольку у меня, кажется, недостаточно репутации, чтобы проголосовать за ответ ...)

Волк писал (а):

Свойство длины вызова на неопределенном или нулевой объект вызовет 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) Я добавил код небольшого плагина, который я использую для этой ситуации.

13 голосов
/ 25 января 2009

Функция поиска возвращает массив совпадающих элементов. Вы можете проверить, равна ли длина нулю. Обратите внимание на изменение, чтобы искать элементы только один раз и использовать результаты по мере необходимости.

var elem = $("#btext" + i);
if (elem.length != 0) {
   elem.text("Branch " + i);
}

Кроме того, вы пытались просто использовать текстовую функцию - если элемент не существует, он ничего не сделает.

$("#btext" + i).text("Branch " + i);
12 голосов
/ 25 января 2009

Функция jquery $ () всегда возвращает ненулевое значение - средние элементы совпадают с выбранной вами степенью. Если элемент не был найден, он вернет пустой массив. Так что ваш код будет выглядеть примерно так -

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}
5 голосов
/ 08 июня 2011

В 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.
5 голосов
/ 02 октября 2010

независимо от того, что вы выбрали, функция $() всегда возвращает объект jQuery, чтобы его нельзя было использовать для тестирования. Лучший способ (если не единственный) - использовать функцию size() или свойство собственной длины, как описано выше.

if ( $('selector').size() ) {...}                   
3 голосов
/ 27 июля 2016

А как насчет использования "undefined"?

if (value != undefined){ // do stuff } 
3 голосов
/ 25 января 2009
if ( $('#whatever')[0] ) {...}

Объект jQuery, который возвращается всеми нативными методами jQuery, НЕ является массивом, это объект со многими свойствами; один из них является свойством длины. Вы также можете проверить size () или get (0) или get () - get (0) работает так же, как и доступ к первому элементу, то есть $ (elem) [0]

1 голос
/ 31 мая 2012

Используя свойство длины, вы можете сделать это.

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
1 голос
/ 10 апреля 2011

используйте $("#selector").get(0) для проверки с нулевым значением. get возвращает элемент dom, до тех пор, пока вы не будете иметь дело с массивом, где вам нужно проверить свойство length. Лично мне не нравится проверка длины для нулевой обработки, она почему-то смущает меня:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...