Obwohl es im Web einige Beispiele dafür gibt, scheint es nicht richtig zu funktionieren. Ich kann das Problem nicht herausfinden.
Ich habe dieses einfache HTML
<div id="foo" data-num="0"></ div>
<a href="#" id="changeData">change data value</a>
Jedes Mal, wenn ich auf den Link "Datenwert ändern" klicke, möchte ich den Datenwert von data-num aktualisieren. Zum Beispiel muss es 1,2,3,4, ... sein (plus 1 jedes Mal, wenn ich auf den Link klicke)
was ich habe ist
var num = $('#foo').data("num");
console.log(num);
num = num+1;
console.log(num);
$('#foo').attr('data-num', num);
Der Wert ändert sich jedes Mal einmal von 0 auf 1. Ich kann es nicht inkrementell machen. Irgendwelche Vorschläge, was ich falsch mache?
.data()
. Das Attribut wird nicht aktualisiert und sollte nicht zum Speichern oder Abrufen von Daten verwendet werden, sondern nur zum anfänglichen Festlegen von Daten.Antworten:
DIE ANTWORT UNTEN IST DIE GUTE
Sie verwenden die Datenmethode nicht richtig. Der richtige Code zum Aktualisieren von Daten lautet:
Ihr Beispiel wäre also:
quelle
Verwenden Sie dies stattdessen, wenn Sie das Attribut data-num des Knotenelements und nicht des Datenobjekts ändern möchten :
DEMO
PS: Aber Sie sollten das data () - Objekt in praktisch allen Fällen verwenden, aber nicht in allen ...
quelle
.prop()
wird bevorzugt), aber nicht die richtige Art, Daten zu verwenden..prop()
greift auf den Wert einer Eigenschaft oder eines Attributs im DOM zu oder ändert ihn, jedoch nicht auf den HTML-Code..attr()
greift auf HTML zu und schreibt es neu, was es langsamer macht als.prop()
. Sie sollten nicht.attr()
stattdessen verwenden.data()
, nicht nur, weil es langsamer ist, sondern weil es nicht so funktionieren soll. jsfiddle.net/eXA76/2.data()
. Wenn Sie die richtige Methode ignorieren und das Attribut verwenden, können Sie wissentlich Probleme verursachen.Wenn wir diese Attribute mit vorhandenen, nativen abzurufen oder aktualisieren wollten JavaScript , dann können wir tun , um die Verwendung
getAttribute
undsetAttribute
Methoden wie unten dargestellt:JavaScript
Durch jQuery
Lesen Sie diese Dokumentation für Vanilla Js oder diese Dokumentation für JQuery
quelle
Für mich hat die Verwendung von Jquery lib 2.1.1 NICHT wie erwartet funktioniert:
Festlegen des Attributwerts für Elementdaten:
ABER das Element selbst bleibt ohne das Attribut:
Ich musste das DOM aktualisieren, damit ich später $ ('. My-class [data-num = "myValue"]') // aktuelle Länge 0 machen konnte
Also musste ich tun
So aktualisieren Sie das DOM:
Ob das Attribut vorhanden ist oder nicht, $ .attr wird überschrieben.
quelle
Hatte ein ähnliches Problem und am Ende musste ich beide einstellen
und
Und danach
Hoffe das hilft.
quelle
Grundsätzlich gibt es zwei Möglichkeiten, den Datenattributwert festzulegen / zu aktualisieren, abhängig von Ihren Anforderungen. Der Unterschied ist nur, wo die Daten gespeichert werden,
Wenn Sie es verwenden
.data()
, wird es in einer lokalen Variablen namens aufgerufendata_user
und ist bei der Elementprüfung nicht sichtbar. Wenn Sie es verwenden, ist.attr()
es öffentlich sichtbar.Viel klarere Erklärung zu diesem Kommentar
quelle
Diese Antwort ist für diejenigen gedacht, die nur den Wert eines Datenattributs ändern möchten
Der vorgeschlagene Wert ändert den Wert Ihres Jquery-Datenattr nicht korrekt, wie @adeneo angegeben hat. Aus irgendeinem Grund sehe ich jedoch nicht, dass er (oder andere) die richtige Methode für diejenigen veröffentlicht, die ihre Datenattr aktualisieren möchten. Die Antwort, die @Lucas Willems gepostet hat, ist möglicherweise die Antwort auf das Problem, das Brian Tompsett - 汤 莱恩 hat, aber es ist nicht die Antwort auf die Anfrage, die andere Benutzer hierher bringt.
Schnelle Antwort in Bezug auf die ursprüngliche Anfrageerklärung
-Um Datenattr zu aktualisieren
Einfache Fehler * - Am Anfang Ihres Attributs muss "data-" stehen, dessen Wert Sie ändern möchten.
quelle
Hatte ein ähnliches Problem, schlage ich vor, dass diese Lösung in IE 10 und darunter nicht unterstützt wird.
Gegeben
Der Javascript-Standard definiert eine Eigenschaft namens Dataset zum Aktualisieren der Datenbeispielaktualisierung.
Hinweis: Verwenden Sie die Kamelschreibweise, um auf das richtige Datenattribut zuzugreifen.
Quelle: https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
quelle
Ich hatte das gleiche Problem, dass das HTML-Daten-Tag nicht aktualisiert wurde, als ich jquery verwendete. Aber das Ändern des Codes, der die eigentliche Arbeit erledigt, von jquery zu javascript funktionierte.
Versuchen Sie dies, wenn Sie auf die Schaltfläche klicken : (Beachten Sie, dass der Hauptcode die Funktion Javascripts setAttribute () ist.)
quelle