jQuery: Belirli sınıf adına sahip div olup olmadığını kontrol edin


235

JQuery kullanarak ben programlı bir grup div's böyle üretiyorum :

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

Benim kod başka bir yerde bu DIVs olup olmadığını tespit etmek gerekir. Div'lerin sınıf adı aynıdır, ancak her div için kimlik değişir. Herhangi bir fikir jQuery kullanarak nasıl tespit?

Yanıtlar:


424

JQuery'den döndürülen ilk nesneyi şu şekilde kontrol ederek bunu basitleştirebilirsiniz:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

Bu durumda, first ( [0]) dizininde bir doğruluk değeri varsa, sınıfın var olduğunu varsayın.

Edit 04/10/2013: Burada bir jsperf test örneği oluşturdum .


İyi bir nokta, her iki durumda da sadece bir özellik arama. Dört karakteri umursamıyorum, ama bağlama göre daha açık olabilir ...
TJ Crowder

Ben de işe yarayan başka çözümler olsa da ben bu çözümü kullanarak sona erdi. Hızlı cevaplar için teşekkürler.
avatar

1
İlginç bir şekilde :first, oraya atmanın performansa yardımcı olacağını düşünebilirsiniz (performansın @itgorilla için önemli bir kriter olup olmadığını bilmiyorum), ancak muhtemelen jQuery'nin kullanabileceği yerel özellikleri değiştirdiği için tarayıcıya göre çılgınca değişip değişmediği. seçimi. İşte div'ın olduğu bir test durumu ve burada olmadığı bir test örneği .
TJ Crowder

Ve eğer bir sınıf yoksa bir kod yürütmek istemezsem?
Thomas Sebastian

1
@ThomasSebastian Tryif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

Kullanabilirsiniz size(), ancak jQuery, başka bir işlev çağrısının ek yükünü önlemek için uzunluk kullanmanızı önerir:

$('div.mydivclass').length

Yani:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

GÜNCELLEME

Seçilen cevap bir perf testi kullanır, ancak perf'in bir parçası olarak eleman seçimini de içerdiği için biraz kusurludur, bu da burada test edilen şey değildir. İşte güncellenmiş bir perf testi:

http://jsperf.com/check-if-div-exists/3

Testin ilk çalıştırması, IMO'nun oldukça önemsiz olmasına rağmen, mülk alımının dizin alımından daha hızlı olduğunu gösteriyor. Ben hala uzun bir koşul yerine kodun niyetine göre daha mantıklı olarak uzunluğunu kullanmayı tercih ederim.


3
Jsperf.com'da araca sağladığınız bağlantıya göre, .lengthşu anda en iyi ortalama performansı sunuyor.
gmeben

İhtiyaçlarımı bir kontrol için en küçük performans etkisiyle sunar.
David O'Regan

77

JQuery olmadan:

Yerel JavaScript her zaman daha hızlı olacaktır. Bu durumda: (örnek)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

Bir üst öğenin belirli bir sınıfa sahip başka bir öğe içerip içermediğini kontrol etmek istiyorsanız, aşağıdakilerden birini kullanabilirsiniz. (misal)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

Alternatif olarak, .contains()üst öğedeki yöntemi kullanabilirsiniz . (misal)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

..ve son olarak, belirli bir öğenin sadece belirli bir sınıf içerip içermediğini kontrol etmek istiyorsanız, şunu kullanın:

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
Doğru bu bir alternatif, ama pahalı bir alternatif. Yavaş (önceki cevapları kullanılan yaklaşımından daha olacak belirgin yavaş, bazı tarayıcılarda) ve jQuery bir dizi oluşturmak zorundadır (daha büyük bellek etkisi de var hepsi bir divsonra geri dönmek, sayfanın öğeleri ve bu sınıfın olup olmadığını görmek için döngüleyin, hepsi diziyi sonunda atmak için).
TJ Crowder

3
@tj hasClass, buradaki diğer seçicilerden% 33 daha hızlı. Kontrol jsperf.com/hasclass00
Hüseyin'i

1
@Hussein: Sadece divvurguladığım konuyu (diziyi oluştururken) yan adımlarla tamamen gerçekçi olmayan bir test durumunda (iki öğe). Bir sürü div ile deneyin: jsperf.com/hasclass00/2 Chrome kopyamda % 63, Firefox kopyamda % 43, Opera'da% 98 (!) Daha yavaş Ama dahası, bu mantıklı oldukça tüm ihtiyacı olan bilgiye seçici motoru vermektense, onu aramak ardından div listesini oluşturmak ve yavaş olduğunu.
TJ Crowder

1
@Hussein: Çok eşit olduğumu ve iddialarınıza dengeli bir karşı kanıt sunduğumu unutmayın. Son kez olmuş gibi görünen bir sinire dokunduğumda özür dilerim. Rahatlayın, kişisel bir hakaret değil, teknik bir tartışma. StackOverflow'da kalın bir cilt ve açık bir zihin faydalıdır.
TJ Crowder

1
@Hussein: HTML5 css seçici bunun neredeyse her zaman bunu yapmanın en kötü yolu olacağı anlamına gelir. Sadece gönderinizi silmediğiniz için -1.
Stefan Kendall



10

divÖğeleri açıkça test etmek için :

if( $('div.mydivclass').length ){...}


Bu .mydivclass, tarayıcıya ve jQuery sürümüne bağlı olarak biraz daha yavaş olabilir .
Stefan Kendall

Doğru, ancak OP özellikle "jQuery - belirli sınıf adıyla div olup olmadığını kontrol et " (benim vurgu), bu yüzden gerçekten dahil ilk olmak için benim oy almakdiv seçici parçası .
TJ Crowder

7

Basit kod aşağıda verilmiştir:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

Div'ı parçacık kimliğiyle gizlemek için:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

İşte bazı yollar:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

İhtiyaca göre yukarıda belirtilen yollardan herhangi birini kullanabiliriz.


2
if ($(".mydivclass").size()){
   // code here
}

size()Yöntem sadece jQuery seçici seçtiği elemanların sayısını döndürür - bu durumda sınıfla öğe sayısını mydivclass. 0 döndürürse, ifade yanlıştır ve bu nedenle hiçbiri yoktur ve başka bir sayı döndürürse, div'ler olmalıdır.


1
lengthMülk varken neden bir yöntem çağırmalısınız ? Ayrıca, bu yalnızca a değil, bu sınıftaki herhangi bir öğeyi de denetler div. (Şimdi, OP'nin söylediği gibi olmasa bile, anlamı bu olabilir.) Stefan Kendall'ın OP'nin gerçekte söylediklerini yapan cevabına bakın (yine de, ne yaptığınızı kastediyor olabilirler).
TJ Crowder

1
@TJ Crowder: Eh, kişisel tat gerçekten - sadece size () yönteminin orada olduğunu hissediyorum - neden kullanmıyorsunuz. Bir işlevi çağırmak için ekstra yük (bir döngüde 1000 kez yapmazsanız) çok azdır, koddaki netliği biraz tercih ederim. İkinci noktanızda - evet, divparçayı kaldırmak için orijinal yanıtımı değiştirdim , iki nedenden dolayı: 1) seçici, OP'nin bir divöğeyi (gelecekte değişebilir) kullanmasıyla sınırlı değildir ve 2) jQuery, AFAIK çoğu tarayıcı ve sürümleri, bu daha hızlı olmalıdır.
Herman Schaaf

"Ben sadece size () yöntemi var hissediyorum - neden kullanmıyorum" Um, tamam. lengthKullanmayın neden özelliği var mı? Ama bu senin tercihinse, adil 'nuff. Diğer yandan, düzenlediğinizi bilmiyordum. Eğer bunu yapacak olsaydım, içinde bırakmış olurdum (yine, özellikle "... ile div ..." (benim vurgulamam) dedi ve sonra buna ek olarak, bir divya da değil, o kısmı Suya da inebiliriz Ama ne olursa olsun :-)..
TJ Crowder

@TJ Crowder: Evet, sanırım bunu düşünüyoruz.
Herman Schaaf

@TJ Crowder: Ama savunmamda, bu tartışma için bir yer olmasa da: size()Sadece herhangi bir eski dizi değil, bir jQuery seçicisindeki öğe sayısını saydığınızı açıklığa kavuşturmak için yöntemin olduğunu hissediyorum . Ama yine de, bu sadece benim tercihim.
Herman Schaaf

2

div'ın belirli bir sınıfla var olup olmadığını kontrol edin

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
Bu mevcut cevapla neredeyse aynı görünüyor .
Pang

Evet öyle ... ama bu cevabı denedim ve işe yaramadı. 'Undefined' ile karşılaştırmayı eklediğimde mükemmel çalışıyor gibi görünüyordu.
17'de stairie

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
Vishal Chhodwani

2

Jquery'de böyle kullanabilirsiniz.

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

JavaScript ile

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Javascript kontrol sınıfı (hasClass) için çok örnek bir çözüm:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

Javascript'te en iyi yol:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}


0

Tüm sayfayı aramak için bunu kullanın

if($('*').hasClass('mydivclass')){
// Do Stuff
}
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.