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

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

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

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

Ответ 1

Проверьте часто задаваемые вопросы jQuery...

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

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

Ответ 2

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

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

Свойство длины вызова на undefinedили нулевой объект вызовет IE и веб-браузеры не работают!

Вместо этого попробуйте следующее:

 // 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 на undefined или нулевом объекте приведет к сбою браузеров, результат селекторов jQuery ($ ('...')) никогда не будет равен null или undefined, Таким образом, предложения кода не имеют смысла. Используйте один из других ответов, они имеют больше смысла.


(Обновление 2012). Поскольку люди смотрят на код, и этот ответ довольно высок в списке: последние пару лет я использовал этот небольшой плагин:

  jQuery.fn['any'] = function() {
     return (this.length > 0);
  };

Я думаю, что $('div'). any() читает лучше, чем $('div'). length, плюс вы не будете страдать так сильно от typs: $('div'). ayn() даст ошибку времени выполнения $('div'). lenght будет, скорее всего, всегда ложным. p >

__
Edits november 2012:

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

if ( $('selector').size() ) {...}                   

Ответ 6

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

Ответ 7

if ( $('#whatever')[0] ) {...}

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

if (typeof($("#btext" + i)) == 'object'){
    $("#btext" + i).text("Branch " + i);
}

Ответ 13

Свойство длины вызова в undefined или нулевом объекте приведет к сбою браузеров IE и webkit!

Вместо этого попробуйте следующее:

if($("#something") !== null){
  // do something
}

или

if($("#something") === null){
  // don't do something
}