jQuery: Überprüfen Sie, ob div mit einem bestimmten Klassennamen vorhanden ist


234

Mit jQuery generiere ich programmgesteuert eine Reihe solcher div's:

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

An einer anderen Stelle in meinem Code muss ich feststellen, ob diese DIVs vorhanden sind. Der Klassenname für die Divs ist derselbe, aber die ID ändert sich für jedes Div. Irgendeine Idee, wie man sie mit jQuery erkennt?

Antworten:


423

Sie können dies vereinfachen, indem Sie das erste von JQuery zurückgegebene Objekt folgendermaßen überprüfen:

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

In diesem Fall wird angenommen [0], dass eine Klasse vorhanden ist, wenn der erste ( ) Index einen Wahrheitswert enthält .

Bearbeiten 2013.04.10: Ich habe einen jsperf Testfall erstellt hier .


Guter Punkt, so oder so ist es nur eine Immobiliensuche. Die vier Charaktere interessieren mich nicht, aber das könnte je nach Kontext klarer sein ...
TJ Crowder

Ich habe diese Lösung letztendlich verwendet, obwohl es auch andere Lösungen gibt, die funktionieren. Vielen Dank für die schnellen Antworten.
Avatar

1
Interessanterweise könnte man denken, ein werfen :firstes auf die Leistung würde helfen , (weiß nicht , ob sich die Leistung ein wichtiges Kriterium für @itgorilla ist), sondern ob sie schwankt wild durch Browser, vermutlich , weil es die nativen Funktionen ändert können jQuery das zu tun , verwenden Auswahl. Hier ist ein Testfall, in dem das div existiert , und hier ist ein Testfall, in dem es nicht existiert .
TJ Crowder

Und wenn ich keinen Code ausführen möchte, wenn keine Klasse existiert?
Thomas Sebastian

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

117

Sie können verwenden size(), aber jQuery empfiehlt, die Länge zu verwenden, um den Overhead eines anderen Funktionsaufrufs zu vermeiden:

$('div.mydivclass').length

So:

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

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

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

AKTUALISIEREN

Die ausgewählte Antwort verwendet einen Perf-Test, ist jedoch leicht fehlerhaft, da sie auch die Elementauswahl als Teil des Perf beinhaltet, was hier nicht getestet wird. Hier ist ein aktualisierter Perf-Test:

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

Mein erster Testlauf zeigt, dass das Abrufen von Eigenschaften schneller ist als das Abrufen von Indizes, obwohl IMO dies ziemlich vernachlässigbar ist. Ich bevorzuge immer noch die Verwendung von Länge, da es für die Absicht des Codes sinnvoller ist, als für eine knappere Bedingung.


3
Laut dem Link, den Sie zum Tool auf jsperf.com bereitgestellt haben, .lengthbietet es derzeit die beste durchschnittliche Leistung.
Gmeben

Server meine Bedürfnisse mit den geringsten Auswirkungen auf die Leistung für eine Überprüfung.
David O'Regan

77

Ohne jQuery:

Natives JavaScript wird immer schneller sein. In diesem Fall: (Beispiel)

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

Wenn Sie überprüfen möchten, ob ein übergeordnetes Element ein anderes Element mit einer bestimmten Klasse enthält, können Sie eine der folgenden Methoden verwenden. (Beispiel)

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

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

Alternativ können Sie die .contains()Methode für das übergeordnete Element verwenden. (Beispiel)

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

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

..und schließlich, wenn Sie überprüfen möchten, ob ein bestimmtes Element nur eine bestimmte Klasse enthält, verwenden Sie:

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

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

3
Dies ist zwar eine Alternative, aber eine teure. Wird langsamer sein als der Ansatz in den früheren Antworten verwendet ( deutlich langsamer, bei einigen Browsern) und haben einen viel größeren Speicher Auswirkungen als auch (jQuery eine Reihe von aufzubauen hat alle der divElemente auf der Seite, dann gehen Sie zurück und Durchlaufen Sie sie, um zu sehen, ob sie diese Klasse haben, und werfen Sie das Array am Ende weg.
TJ Crowder

3
@tj hasClassist 33% schneller als die anderen Selektoren hier. Überprüfen Sie jsperf.com/hasclass00
Hussein

1
@Hussein: Nur mit einem völlig unrealistischen Testfall (zwei divElemente), der genau das Problem umgeht, das ich hervorgehoben habe ( Erstellen des Arrays). Probieren Sie es mit einer Reihe von Divs aus: jsperf.com/hasclass00/2 Es ist 63% langsamer auf meiner Chrome-Kopie, 43% langsamer auf meiner Firefox-Kopie, 98% (!) Langsamer auf Opera. Darüber hinaus ist es sinnvoll , eine Liste von Divs zu erstellen und diese dann zu durchsuchen, anstatt der Selector-Engine alle erforderlichen Informationen zu geben.
TJ Crowder

1
@ Hussein: Beachten Sie, dass ich sehr ausgeglichen war und ausgewogene Gegenbeweise für Ihre Behauptungen vorgelegt habe. Es tut mir leid, wenn ich einen Nerv berührt habe, das schien auch beim letzten Mal zu passieren. Entspannen Sie sich, es ist keine persönliche Beleidigung, es ist eine technische Diskussion. Eine dicke Haut und ein offener Geist sind bei StackOverflow nützlich.
TJ Crowder

1
@Hussein: Der HTML5-CSS-Selektor bedeutet, dass dies mit ziemlicher Sicherheit immer der schlechteste Weg ist, dies zu tun. -1, um Ihren Beitrag nicht einfach zu löschen.
Stefan Kendall

46

Hier ist eine Lösung ohne Jquery

var hasClass = element.classList.contains('class name to search');
// hasClass is boolean
if(hasClass === true)
{
     // Class exists
}

Referenz Link


1
classList wird nur in IE10 + unterstützt: caniuse.com/classlist . Sie müssen eine Polyfüllung github.com/eligrey/classList.js hinzufügen oder Ihre eigenen Methoden schreiben
AFD


10

So testen Sie divexplizit auf Elemente:

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


Dies kann etwas langsamer sein als .mydivclassje nach Browser und jQuery-Version.
Stefan Kendall

Stimmt, aber das OP hat ausdrücklich "jQuery - überprüfe, ob div mit einem bestimmten Klassennamen existiert " (meine Betonung) gesagt , so dass du meine Stimme dafür bekommst, dass ich der erste bin, der den divTeil des Selektors tatsächlich einschließt .
TJ Crowder

7

Der einfache Code ist unten angegeben:

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

So verstecken Sie das div mit der Partizip-ID:

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

3

Hier sind einige Möglichkeiten:

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

Wir können je nach Anforderung eine der oben beschriebenen Möglichkeiten verwenden.


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

Die size()Methode gibt nur die Anzahl der Elemente zurück, die der jQuery-Selektor auswählt - in diesem Fall die Anzahl der Elemente mit der Klasse mydivclass. Wenn es 0 zurückgibt, ist der Ausdruck falsch, und daher gibt es keinen, und wenn es eine andere Zahl zurückgibt, müssen die divs existieren.


1
Warum eine Methode aufrufen, wenn es die lengthEigenschaft gibt? Auch diese Kontrollen für jedes Element mit dieser Klasse, nicht nur einem div. (Nun, das könnte das sein, was das OP bedeutete, auch wenn es nicht das ist, was er / sie gesagt hat.) Siehe Stefan Kendalls Antwort, die das tut, was das OP tatsächlich gesagt hat (auch wenn sie möglicherweise gemeint haben, was Sie getan haben).
TJ Crowder

1
@TJ Crowder: Nun, wirklich persönlicher Geschmack - ich glaube nur, dass die size () -Methode da ist - warum nicht? Der zusätzliche Aufwand beim Aufrufen einer Funktion (es sei denn, Sie führen dies 1000 Mal in einer Schleife aus) ist so gering, dass ich lieber ein wenig Klarheit im Code anstrebe. Zu Ihrem zweiten Punkt - ja, ich habe meine ursprüngliche Antwort geändert, um das divTeil zu entfernen , aus zwei Gründen: 1) Der Selektor ist nicht so stark an die Tatsache gebunden, dass OP ein divElement verwendet (es könnte sich in Zukunft ändern), und 2) in Bei den meisten Browsern und Versionen von jQuery, AFAIK, sollte dies schneller sein.
Herman Schaaf

"Ich habe nur das Gefühl, dass die size () -Methode vorhanden ist - warum nicht?" Ähm, okay. Die lengthImmobilie ist da, warum nicht nutzen? Aber wenn es Ihre Präferenz ist, fair 'nuff. Andererseits wusste ich nicht, dass Sie es herausgeschnitten hatten. Wenn ich das tun würde, hätte ich es belassen (wieder sagte er ausdrücklich "... wenn div mit ..." (meine Betonung) und erwähnte dann zusätzlich, wenn es egal wäre, ob es war ein divoder nicht, Sie könnten diesen Teil fallen lassen. Aber was auch immer. :-)
TJ Crowder

@TJ Crowder: Ja, ich denke wir überdenken das.
Herman Schaaf

@TJ Crowder: Aber zu meiner Verteidigung, obwohl dies nicht der Ort für die Diskussion ist: Ich denke, die size()Methode ist da, um klar zu machen, dass Sie die Anzahl der Elemente in einem jQuery-Selektor zählen und nicht irgendein altes Array. Aber auch das ist nur meine Präferenz.
Herman Schaaf

2

Überprüfen Sie, ob das div mit einer bestimmten Klasse existiert

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

}

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

2
Scheint fast identisch mit dieser bestehenden Antwort .
Pang

Ja, aber ich habe diese Antwort versucht und es hat nicht funktioniert. Als ich den Vergleich zu "undefiniert" hinzufügte, schien er perfekt zu funktionieren.
Treppe

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

Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Vishal Chhodwani

2

In Jquery können Sie so verwenden.

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

   // Do something if class exists

} else {

// Do something if class does not exist

}

Mit JavaScript

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

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Hier ist eine sehr beispielhafte Lösung für die Prüfklasse (hasClass) in Javascript:

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

1

Der beste Weg in Javascript:

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


0

Verwenden Sie diese Option, um die gesamte Seite zu durchsuchen

if($('*').hasClass('mydivclass')){
// Do Stuff
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.