Як перевірити нульові об'єкти в jQuery


169

Я використовую jQuery і хочу перевірити наявність елемента на своїй сторінці. Я написав наступний код, але він не працює:

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

Як перевірити існування елемента?

Відповіді:


251

Перевірте питання про jQuery ...

Ви можете використовувати властивість довжини колекції jQuery, повернуту вашим селектором:

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

що ти думаєш про var _myDiv = $ ('# myDiv'); ... .... якщо (_myDiv.lenght) {...} створити виняток.
— Нурі ЙІЛМАЗ

1
як казав eleotlecram; краще уникати .length
— numediaweb

5
@AurelianoBuendia, ви використовували lenghtзамість length; це помилка написання.
— Сем

4
@numediaweb, eleotlecram не сказав уникати .length.
— Сем

1
але .. ви б не отримали помилку "Неможливо прочитати властивість" length "null"?
— Пробачте SEO

61

(Оскільки я, здається, не маю достатньої репутації, щоб проголосувати відповідь ...)

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

Виклик властивості довжини на невизначеному або нульовому об'єкті призведе до виходу з ладу браузерів 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
}

Хоча це правда, що виклик властивості довжини на невизначеному або нульовому об'єкті призведе до відмови браузерів, результат селекторів jQuery ($ ('...')) ніколи не буде нульовим або невизначеним. Таким чином, пропозиції щодо коду не мають сенсу. Використовуйте одну з інших відповідей, вони мають більше сенсу.


(Оновлення 2012 р.) Оскільки люди дивляться на код і ця відповідь є досить високою у списку: Останні пару років я використовую цей невеликий плагін:

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

Я думаю, що $ ('div'). Any () читає краще ніж $ ('div'). Length , плюс ви не будете страждати стільки від помилок: $ ('div'). Ayn () дасть помилку під час виконання , $ ('div'). довжина мовчки, швидше за все, завжди буде хибною.

__
Зміни листопада 2012 року:

1) Оскільки люди схильні дивитись на код, а не читати те, що сказано навколо коду, я додав дві великі зауваження лектора до цитованого коду Вовка.
2) Я додав код маленького плагіна, який використовую для цієї ситуації.


2
@VovaPopov: Я пропоную наступного разу трохи більше часу прочитати відповідь. Я просто констатував, що приклад коду "від Вольфа" був невірним. Я ніколи не давав відповіді, просто згадував деякі інші відповіді, які мають більше сенсу.
— eleotlecram

Хороша відповідь. Мені шкода, що люди неправильно трактують це.
— Джо Сіммонс

14

Функція пошуку повертає масив відповідних елементів. Ви можете перевірити, чи довжина дорівнює нулю. Зверніть увагу на зміну, щоб шукати елементи лише один раз і повторно використовувати результати за необхідності.

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

Також ви спробували просто скористатися текстовою функцією - якщо жодного елемента не існує, він нічого не зробить.

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

7
0 - помилкове значення, тому вираз elem.length оцінюється як хибне - іншими словами, немає потреби в частині '! = 0'
— Джеймс

2
@ 999, я думаю, що перевірка проти нуля робить код більш читабельним, хоча обидва способи, ймовірно, читаються для тих, хто звик писати мови.
— Сем

12

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

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

1
Я не думаю, що це правда, що $ () повертає масив. Об'єкти jQuery мають поведінку, схожу на масиви, але я не думаю, що вони насправді є масивами, і я думаю, ви виявите, що не вся їх поведінка така, як у масивах. Дивіться цю швидку демонстрацію .
— Сем

5

У 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

незалежно від того, що ви вибрали, функція $()завжди повертає об'єкт jQuery, щоб не можна було використовувати для тестування. Найкращий спосіб (якщо не єдиний) - це використовувати size()функцію або властивість нативної довжини, як пояснено вище.

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

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

Об'єкт jQuery, який повертається всіма нативними методами jQuery, НЕ є масивом, це об'єкт з багатьма властивостями; одна з них є властивістю "довжини". Ви також можете перевірити розмір () або отримати (0) або get () - "get (0)" працює так само, як і доступ до першого елемента, тобто $ (elem) [0]



1

використовувати $("#selector").get(0)для перевірки з таким нулем. get повертає елемент dom, до цього часу ви не маєте справу з масивом, де вам потрібно перевірити властивість length. Особисто мені не подобається перевірка довжини на нульову обробку, це мене чомусь бентежить :)


Цікаво, як різні люди думають по-різному; Думаю, має сенс перевірити, чи кількість елементів дорівнює нулю, а не перевіряти, чи присутній перший елемент.
— Сем

1

Використовуючи властивість довжини, ви можете це зробити.

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

2
Ви маєте на увазі (це). Довжина> 0?
— sage88

0

коли об’єкт порожній, поверніть цю помилку:

Uncaught TypeError: Cannot read property '0' of null

Я пробую цей код:

try{
  if ($("#btext" + i).length) {};               
}catch(err){
  if ($("#btext" + i).length) {
     //working this code if the item, not NULL 
   }
}


-7

Виклик властивості довжини на невизначеному або нульовому об'єкті призведе до виходу з ладу браузерів IE та webkit!

Натомість спробуйте це:

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

або

if($("#something") === null){
  // don't do something
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.