it-swarm.com.ru

Как проверить нулевые объекты в jQuery

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

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

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

162
Prashant

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

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

if ( $('#myDiv').length ){}
245
Christoph

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

Волк написал:

Вызов свойства 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'). lenght скорее всего всегда будет ложным.

__
Изменения ноября 2012 г .:

1) Поскольку люди склонны смотреть на код, а не читать то, что сказано вокруг кода, я добавил две большие заметки лектора предостережения в цитируемый код Wolf.
2) Я добавил код небольшого плагина, который я использую для этой ситуации.

59
eleotlecram

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

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

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

$("#btext" + i).text("Branch " + i);
13
tvanfosson

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

if ($("#btext" + i).length){
        //alert($("#btext" + i).text());
    $("#btext" + i).text("Branch " + i);
}
12
waney

В 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
theamoeba

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

if ( $('selector').size() ) {...}                   
5
burntblark
if ( $('#whatever')[0] ) {...}

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

3
James

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

if (value != undefined){ // do stuff } 
3
Hugh Seagraves

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

1
Emre

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

jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) { 
   //do somthing
}
1
Suresh Pattu

когда объект пуст, возвращаем эту ошибку:
ncaught TypeError: Невозможно прочитать свойство '0' с нулевым значением
Я пробую этот код
try{ if ($("#btext" + i).length) {};
} catch(err){ if ($("#btext" + i).length) { //working this code if item not NULL }; }

0
ahmadjn