JQuery'de null nesneler nasıl kontrol edilir


169

JQuery kullanıyorum ve sayfamda bir öğenin varlığını kontrol etmek istiyorum. Aşağıdaki kodu yazdım, ama çalışmıyor:

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

Elemanın varlığını nasıl kontrol ederim?

Yanıtlar:


251

JQuery SSS bölümünü kontrol edin ...

Seçiciniz tarafından döndürülen jQuery koleksiyonunun length özelliğini kullanabilirsiniz:

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

var _myDiv = $ ('# myDiv') hakkında ne düşünüyorsun; ... .... (_myDiv.lenght) {...} istisna oluşturursa.
Nuri YILMAZ

1
eleotlecram'ın dediği gibi; daha iyi kaçının .length
numediaweb

5
@AurelianoBuendia lenghtyerine length; bir yazım hatası.
Sam

4
@numediaweb, eleotlecram kaçınmak için söylemedi .length.
Sam

1
ama .. "null özelliği 'uzunluk' okunamıyor" hatasıyla karşılaşmaz mıydınız?
Sagive SEO

61

(Cevabı oylamak için yeterli itibara sahip olmadığım için ...)

Wolf şunu yazdı:

Undefined veya null bir nesnede length özelliği çağrıldığında IE ve webkit tarayıcıları başarısız olur!

Bunun yerine şunu deneyin:

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") !== null){
  // do something
}

veya

 // NOTE!! THE FOLLOWING IS WRONG; DO NOT USE!  -- EleotleCram
if($("#something") === null){
  // don't do something
}

Undefined veya null bir nesnede length özelliğinin çağrılmasının tarayıcıların başarısız olmasına neden olacağı doğru olsa da, jQuery seçicilerinin ($ ('...')) sonucu asla null veya undefined olmaz. Dolayısıyla kod önerileri bir anlam ifade etmiyor. Diğer cevaplardan birini kullanın, daha mantıklı.


(Güncelleme 2012) İnsanlar koda baktığından ve bu cevap listenin oldukça üstünde olduğundan: Son birkaç yıldır bu küçük eklentiyi kullanıyorum:

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

Bence $ ('div'). Any () $ ('div'). Uzunluğundan daha iyi okur , ayrıca yazım hatalarından çok fazla acı çekmezsiniz: $ ('div'). Ayn () bir çalışma zamanı hatası verir , $ ('div'). uzunluk sessizce büyük olasılıkla daima sahteler.

__
Kasım 2012 düzenlemeleri:

1) İnsanlar koda bakma ve kod etrafında söylenenleri okuma eğiliminde olduğu için, alıntılanan Wolf koduna iki büyük uyarı notu ekledim.
2) Bu durum için kullandığım küçük eklentinin kodunu ekledim.


2
@VovaPopov: Bir dahaki sefere yanıtı okumak için biraz daha zaman ayırmanızı öneririm. Sadece "Wolf tarafından" kod örneğinin yanlış olduğunu belirttim. Hiç cevap vermedim, sadece daha anlamlı olan diğer cevaplardan bazılarına değindim.
eleotlecram

İyi cevap. Üzgünüm insanlar yanlış yorumluyor.
Joe Simmons

14

Arama işlevi, eşleşen bir dizi öğe döndürür. Uzunluğun sıfır olup olmadığını kontrol edebilirsiniz. Öğelere yalnızca bir kez bakma ve sonuçları gerektiği gibi yeniden kullanma değişikliğine dikkat edin.

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

Ayrıca, sadece metin işlevini kullanmayı denediniz mi - öğe yoksa, hiçbir şey yapmaz.

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

7
0 yanlış bir değerdir, bu nedenle elem.length ifadesi false olarak değerlendirilir - başka bir deyişle,
James

2
@ 999, her iki yol da muhtemelen betik dilleri için kullanılan biri tarafından okunabilir olmasına rağmen, sıfıra karşı kontrol kodu daha okunabilir hale getirdiğini düşünüyorum.
Sam

12

jquery $ () işlevi her zaman null olmayan değer döndürür - seçici cretaria ile eşleşen ortalama öğeler. Öğe bulunamadığı takdirde boş bir dizi döndürür. Kodunuz şöyle görünecek -

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

1
$ () Bir dizi döndürür doğru olduğunu sanmıyorum. jQuery nesnelerinin dizilere benzer davranışları vardır, ancak bunların aslında diziler olduğunu düşünmüyorum ve tüm davranışlarının dizilerle aynı olmadığını göreceksiniz. Bu hızlı gösteriye bakın .
Sam

5

JQuery 1.4'te $ .isEmptyObject işlevini alırsınız, ancak bizim gibi zayıf Drupal geliştiricileri gibi jQ'nun eski bir sürümünü kullanmak zorunda kalırsanız, sadece bu kodu kullanın:

// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
  for ( var name in obj ) {
    return false;
  }
  return true;
}

Gibi kullanın:

console.log(isObjectEmpty(the_object)); // Returns true or false.

Bu soruya değinmiyor.
Sam

5

Seçiminiz ne olursa olsun, işlev $()her zaman bir jQuery nesnesi döndürür, böylece test etmek için kullanılamaz. Şimdiye kadarki en iyi yol (sadece değilse), size()yukarıda açıklandığı gibi işlevi veya yerel uzunluk özelliğini kullanmaktır .

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

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

Tüm yerel jQuery yöntemleri tarafından döndürülen jQuery nesnesi bir dizi DEĞİLDİR, birçok özelliğe sahip bir nesnedir; bunlardan biri "uzunluk" özelliği. Ayrıca boyut () veya get (0) alabilir veya get () - 'get (0)', ilk öğeye erişmeyle aynı şekilde çalışır, yani $ (elem) [0]



1

$("#selector").get(0)bu şekilde null ile kontrol etmek için kullanın . get, dom özelliğini döndürür, o zamana kadar length özelliğini kontrol etmeniz gereken bir dizi ile uğraşırsınız. Şahsen null kullanım için uzunluk kontrolünü sevmiyorum, nedense beni karıştırıyor :)


Farklı insanların farklı düşünme biçimleri ilginçtir; İlk elemanın mevcut olup olmadığını kontrol etmek yerine eleman sayısının sıfır olup olmadığını kontrol etmenin daha anlamlı olduğunu düşünüyorum.
Sam

1

Length özelliğini kullanarak bunu yapabilirsiniz.

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

2
Şunu mu demek istedin (this) .length> 0?
sage88

0

nesne boş olduğunda bu hatayı döndürün:

Uncaught TypeError: Cannot read property '0' of null

Bu kodu deniyorum:

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

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

-7

Undefined veya null bir nesnede length özelliği çağrıldığında IE ve webkit tarayıcıları başarısız olur!

Bunun yerine şunu deneyin:

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

veya

if($("#something") === null){
  // don't do something
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.