Angenommen, ich habe 4 div-Elemente mit Klasse .navlink
, mit denen beim Klicken .data()
ein Schlüssel namens 'selected'
auf den Wert gesetzt wird true
:
$('.navlink')click(function() { $(this).data('selected', true); })
Jedes Mal, wenn auf ein neues .navlink
geklickt wird, möchte ich das zuvor ausgewählte navlink
für eine spätere Bearbeitung speichern . Gibt es eine schnelle und einfache Möglichkeit, ein Element basierend auf dem, was mit gespeichert wurde, auszuwählen .data()
?
Es scheint keine jQuery : -Filter zu geben , die zur Rechnung passen, und ich habe Folgendes versucht (innerhalb desselben Klickereignisses), aber aus irgendeinem Grund funktioniert es nicht:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Ich weiß, dass es andere Möglichkeiten gibt, dies zu erreichen, aber im Moment bin ich meistens nur neugierig, ob dies über möglich ist .data()
.
$("*").filter(function() { return $(this).data("DATA IDENTIFIER HERE") == DATA VALUE HERE; });
Nur zur Veranschaulichung : Sie können Daten mit jquery filtern (diese Frage ist ziemlich alt und jQuery hat sich seitdem weiterentwickelt, daher ist es richtig, auch diese Lösung zu schreiben):
oder besser (für die Leistung):
oder, wenn Sie alle Elemente mit
data-selected
set erhalten möchten :Beachten Sie, dass diese Methode nur mit Daten funktioniert, die über HTML-Attribute festgelegt wurden. Wenn Sie mit dem
.data()
Aufruf Daten festlegen oder ändern , funktioniert diese Methode nicht mehr.quelle
.data()
Methode anstelle einesdata-
Attributs festgelegt werden. Siehe diese Geige: jsfiddle.net/bryandowning/tySWC - Außerdem.find()
sucht die Methode nach untergeordneten Elementen des vorhergehenden Selektors. In dem angegebenen Beispieldata-selected
ist ein Attribut von.navlink
, kein Kind von.navlink
. Auch$('div p')
und$('div').find('p')
sind im Wesentlichen gleichwertig. Die Verwendung.find()
scheint aufgrund des zusätzlichen Funktionsaufrufs langsamer zu sein (obwohl ich diesbezüglich nicht sicher bin). Bitte korrigieren Sie mich, wenn ich in irgendetwas falsch liege (ich wünschte wirklich, diese Methode würde funktionieren)..data()
. Da jQuery das DOM durchsucht, habe ich es für diejenigen (wie mich) gepostet, die aus anderen Gründen zu dieser Frage gekommen sind. 2) richtig,.find()
durchsucht die Kinder, so dass es in diesem Beispiel falsch ist; 3) Sie liegen falsch, sie sind nicht gleichwertig, da jQuery von rechts nach links sucht, siehe jonraasch.com/blog/…$('[data-selected]')
half mir für so etwas wie$('ul.categories a[data-categories_id]').click(......);
Wir können ziemlich einfach ein Plugin erstellen:
Verwendung (Aktivieren eines Optionsfelds):
quelle
Zwei Dinge sind mir aufgefallen (es können jedoch Fehler sein, als Sie es aufgeschrieben haben).
$('.navlink').click
)return $(this).data("selected")==true
) zurückgeben.quelle
Klingt nach mehr Arbeit als es wert ist.
1) Warum nicht einfach eine einzige JavaScript-Variable haben, die einen Verweis auf das aktuell ausgewählte Element \ jQuery-Objekt speichert.
2) Fügen Sie dem aktuell ausgewählten Element eine Klasse hinzu. Dann könnten Sie das DOM nach der Klasse ".active" abfragen oder so.
quelle