Ich möchte einen Stil auf ein bestimmtes Div anwenden. Zum Beispiel werden beim Laden alle mit einer Klasse von foo angezeigt, aber ich möchte möglicherweise eine Instanz der Klasse foo ausschalten, die eine ID von bar hat.
Nicholas Murray
1
Dann würden Sie einfach tun, dass $('#bar.foo').toggle();Sie immer nur eine ID haben, da diese für das Dokument eindeutig sein müssen. Wenn Sie diese ID nur umschalten möchten, wenn sie von Klasse fooist, fügen Sie die Klasse einfach dem ID-Selektor hinzu. Wenn der Selektor eine leere Menge findet, passiert nichts. Wenn er eine Menge mit Ergebnissen findet (von denen es nur eine gibt), schaltet er das Element um. Ich denke, du überdenkst das.
prodigitalson
3
nur um zu sagen, es ist frustrierend, wenn Leute sagen: "Warum willst du das jemals tun?" wenn ich das gerade versuche. Das Problem mit hasClass ist, dass True zurückgegeben wird, wenn ein Element, das mit dem Selektor übereinstimmt, die angegebene Klasse hat. Wo ich also viele p mit der Klasse "Kuchen" und zusätzlichen Klassennamen für jede ("eins", "zwei" usw.) habe, habe ich ein Problem. Ich möchte den allgemeinen Satz von p.cake auswählen und dann eine Bedingung haben (wenn class = "one" - $ var = 23 - etc). Der Punkt ist, dass ich versuche, abhängig vom zusätzlichen Klassennamen eine andere $ var zu übergeben. Ich versuche nicht das ganze bisschen wiederholen zu müssen
Stella
Antworten:
171
Sie können diese Logik in den Selektor einbinden, indem Sie mehrere Selektoren kombinieren . Zum Beispiel könnten wir alle Elemente mit einer bestimmten ID ansprechen, die auch eine bestimmte Klasse haben:
Dies sollte ähnlich aussehen wie etwas, das Sie in CSS schreiben würden. Beachten Sie, dass dies nicht für alle #fooElemente gilt (obwohl es nur eines geben sollte), und dass es nicht für alle .barElemente gilt (obwohl es möglicherweise viele gibt). Es werden nur Elemente referenziert, die für beide Attribute qualifiziert sind.
jQuery hat auch eine großartige .isMethode , mit der Sie feststellen können, ob ein Element bestimmte Eigenschaften hat. Sie können eine jQuery-Auflistung anhand eines Zeichenfolgenselektors, eines HTML-Elements oder eines anderen jQuery-Objekts testen. In diesem Fall überprüfen wir es einfach anhand eines String-Selektors:
$(".bar:first").is("#foo");// TRUE if first '.bar' in document is also '#foo'
+1 für is(). Es sollte einen .hasId()Selektor geben, nur weil es wie ein offensichtlicher Partner für .hasClass()wirklich ...
Matt Fletcher
43
Ich würde das wahrscheinlich verwenden. $('.mydiv').is('#foo');Das heißt, wenn Sie die ID kennen, warum würden Sie sie dann nicht einfach auf den Selektor anwenden?
Möglicherweise wird der Code in eine Rückruffunktion umgewandelt, die einen bestimmten Fall anders behandeln muss. Daher wird der Funktion automatisch ein jQuery-Objekt mit unbekannten Attributen übergeben. In diesem Fall ist $ ('Ihre Antwort'). ('Hilfreich');
Peter G
1
Ich kann mir eine Reihe von Gründen vorstellen. Was ist, wenn Sie eine mobile spezifische Einstellung anwenden möchten, z. B. wenn ein Element die ID = "mobil" hat? Das Warum ist nicht wichtig.
Platzierbar
Nun, nur 1 Element sollte jemals eine gegebene haben, idsonst sollte es ein anderes Attribut sein ... Ich nehme an, wenn sich die strukturelle Position des fraglichen Elements basierend auf der Seite oder dem Client / Benutzer-Agent ändert, dann ok, aber anders als das. .
prodigitalson
19
Update: Entschuldigung, die Frage wurde falsch verstanden, die .has()Antwort wurde entfernt .
Eine andere Alternative ist das Erstellen eines .hasId()Plugins
// the plugin
$.fn.hasId =function(id){returnthis.attr('id')== id;};// select first class
$('.mydiv').hasId('foo')?
console.log('yes'): console.log('no');// select second class// $('.mydiv').eq(1).hasId('foo')// or
$('.mydiv:eq(1)').hasId('foo')?
console.log('yes'): console.log('no');
Entschuldigung, aber ich denke, Sie haben die Frage falsch interpretiert: has () API meldet dies: Reduzieren Sie die Menge der übereinstimmenden Elemente auf diejenigen, deren Nachkommen dem Selektor oder DOM-Element entsprechen. Das OP fragt, wie getestet werden soll, ob das Element mit der Klasse 'myDiv' auch die ID foo hat, während has () nach Nachkommen von 'myDiv' mit der ID 'foo' sucht.
Tilt
7
Angenommen, Sie durchlaufen einige DOM-Objekte und möchten ein Element mit einer bestimmten ID finden und abfangen
Der gleiche Code kann für die Klassenauswahl leicht geändert werden.
<divid="myDiv"><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div></div>
$('#myDiv div').each(function() {
if($(this).hasClass('bar'))
//do something with bar
});
Ich bin froh, dass Sie Ihr Problem mit index () gelöst haben, was auch immer für Sie funktioniert. Ich hoffe, dies wird anderen mit dem gleichen Problem helfen. Prost :)
das jeder wird nicht benötigt, weil es nie mehr als eins geben wird #theMysteryId.
prodigitalson
2
Nun, es erspart Ihnen die Mühe, sie einer Variablen zuzuweisen, zu überprüfen, ob die Länge nicht leer ist, und dann mit dem Code fortzufahren. Wenn der Selektor mit nichts übereinstimmt, ruft jQuery die Funktion "each" einfach nicht auf, ist also schön und sauber. Wenn Sie nur eine jQuery-API aufrufen möchten, sind Sie sicher.
Pointy
4
Um nur zu sagen, ich habe dies schließlich mit index () gelöst.
NICHTS anderes schien zu funktionieren.
Für Geschwisterelemente ist dies eine gute Lösung, wenn Sie zuerst eine gemeinsame Klasse auswählen und dann für jede bestimmte Klasse etwas anderes ändern möchten.
BEARBEITEN: Für diejenigen, die (wie ich) nicht wissen, gibt index () einen Indexwert für jedes Element an, der mit dem Selektor übereinstimmt, und zählt von 0, abhängig von ihrer Reihenfolge im DOM. Solange Sie wissen, wie viele Elemente es mit class = "foo" gibt, benötigen Sie keine ID.
Natürlich hilft das nicht immer, aber jemand könnte es nützlich finden.
$('#bar.foo').toggle();
Sie immer nur eine ID haben, da diese für das Dokument eindeutig sein müssen. Wenn Sie diese ID nur umschalten möchten, wenn sie von Klassefoo
ist, fügen Sie die Klasse einfach dem ID-Selektor hinzu. Wenn der Selektor eine leere Menge findet, passiert nichts. Wenn er eine Menge mit Ergebnissen findet (von denen es nur eine gibt), schaltet er das Element um. Ich denke, du überdenkst das.Antworten:
Sie können diese Logik in den Selektor einbinden, indem Sie mehrere Selektoren kombinieren . Zum Beispiel könnten wir alle Elemente mit einer bestimmten ID ansprechen, die auch eine bestimmte Klasse haben:
Dies sollte ähnlich aussehen wie etwas, das Sie in CSS schreiben würden. Beachten Sie, dass dies nicht für alle
#foo
Elemente gilt (obwohl es nur eines geben sollte), und dass es nicht für alle.bar
Elemente gilt (obwohl es möglicherweise viele gibt). Es werden nur Elemente referenziert, die für beide Attribute qualifiziert sind.jQuery hat auch eine großartige
.is
Methode , mit der Sie feststellen können, ob ein Element bestimmte Eigenschaften hat. Sie können eine jQuery-Auflistung anhand eines Zeichenfolgenselektors, eines HTML-Elements oder eines anderen jQuery-Objekts testen. In diesem Fall überprüfen wir es einfach anhand eines String-Selektors:quelle
is()
. Es sollte einen.hasId()
Selektor geben, nur weil es wie ein offensichtlicher Partner für.hasClass()
wirklich ...Ich würde das wahrscheinlich verwenden.
$('.mydiv').is('#foo');
Das heißt, wenn Sie die ID kennen, warum würden Sie sie dann nicht einfach auf den Selektor anwenden?quelle
id
sonst sollte es ein anderes Attribut sein ... Ich nehme an, wenn sich die strukturelle Position des fraglichen Elements basierend auf der Seite oder dem Client / Benutzer-Agent ändert, dann ok, aber anders als das. .Update: Entschuldigung, die Frage wurde falsch verstanden, die
.has()
Antwort wurde entfernt .Eine andere Alternative ist das Erstellen eines
.hasId()
Pluginsquelle
Angenommen, Sie durchlaufen einige DOM-Objekte und möchten ein Element mit einer bestimmten ID finden und abfangen
Sie können entweder etwas schreiben, um zu finden
Beachten Sie, dass die find-Methode alle übereinstimmenden Elemente zurückgibt, wenn Sie einen Klassenselektor verwenden.
oder Sie könnten eine iterierende Funktion schreiben, die fortgeschrittenere Arbeiten erledigt
Der gleiche Code kann für die Klassenauswahl leicht geändert werden.
Ich bin froh, dass Sie Ihr Problem mit index () gelöst haben, was auch immer für Sie funktioniert. Ich hoffe, dies wird anderen mit dem gleichen Problem helfen. Prost :)
quelle
quelle
#theMysteryId
.Um nur zu sagen, ich habe dies schließlich mit index () gelöst.
NICHTS anderes schien zu funktionieren.
Für Geschwisterelemente ist dies eine gute Lösung, wenn Sie zuerst eine gemeinsame Klasse auswählen und dann für jede bestimmte Klasse etwas anderes ändern möchten.
BEARBEITEN: Für diejenigen, die (wie ich) nicht wissen, gibt index () einen Indexwert für jedes Element an, der mit dem Selektor übereinstimmt, und zählt von 0, abhängig von ihrer Reihenfolge im DOM. Solange Sie wissen, wie viele Elemente es mit class = "foo" gibt, benötigen Sie keine ID.
Natürlich hilft das nicht immer, aber jemand könnte es nützlich finden.
quelle
Überprüfen Sie, ob die ID des Elements vorhanden ist
quelle
Sie können auch überprüfen, ob das id-Element verwendet wird:
Ich verwende diese Methode für globale Datentabellen und bestimmte geordnete Datentabellen
quelle