2017-02-22 3 views
2

Ich versuche, die folgendes zu tun:.hasClass() keine Funktion?

$('.myEm').closest('.area').hasClass('medium').toggleClass('large-4 large-12'); 

Aber ich erhalte eine Fehlermeldung, .hasClass ist keine Funktion. Was vermisse ich?

+1

Wenn 'jQuery' nichts für' .closes() 'findet, dann rufen Sie' .hasClass() 'auf einem Nicht-Jquery-Objekt an. –

Antwort

7

Sie können andere Methoden nach der .hasClass() method nicht so verketten.

Die .hasClass() method gibt einen booleschen Wert basierend darauf zurück, ob der jQuery-Selektor eine bestimmte Klasse besitzt. Es scheint, wie Sie für die .has() method suchen, die die Sammlung von Element-Filter (n) auf der Grundlage, ob es ein bestimmtes Nachkomme Element Anpassung der Wähler hat:

$('.myEm').closest('.area').has('.medium').toggleClass('large-4 large-12'); 

... oder Sie könnten die :has() selector verwenden als gut:

$('.myEm').closest('.area:has(.medium)').toggleClass('large-4 large-12'); 

der Grund, warum Sie Kette können die meisten anderen jQuery-Methoden ist, weil sie eine jQuery object zurück. Wenn Sie die Dokumentation zu einer jQuery-Methode oder einem jQuery-Selektor überprüfen, können Sie den Rückgabetyp bestimmen (der angibt, ob Sie anschließend zusätzliche Methoden verketten können). Wie oben erwähnt, wird die .hasClass() Methode kein jQuery-Objekt zurück, gibt es true/false, weshalb die folgende Fehler sehen besagt, dass es nicht eine Funktion ist:

Uncaught TypeError: $(...).closest(...).hasClass(...).toggleClass is not a function

+0

Danke. Schnelle Frage: "Medium" ist eine Klasse. Muss ich nicht einen Punkt davor haben wie in .has ('. Medium') – santa

+0

@santa - Ja, aktualisiert. Guter Fang. –

Verwandte Themen