2010-04-22 2 views

Antwort

23

Dies ist ein wenig seltsam aussieht, aber nach die Dokumentation .data() alle Datenfelder als ein Objekt zurückgibt, so dass Sie seinen Wert direkt ändern können:

$('#id').data('counter', 0); 

Beide Optionen funktionieren:

$('#id').data().counter++; 
$('#id').data()['counter'] += 5; 

Abrufen der Daten zurückgeben den erwarteten Wert.

alert($('#id').data('counter')); // 6 
+2

+1 Netter Fang !! – Reigel

+1

Aufgrund der Leistung sollten Sie vermeiden, Daten zweimal aufzurufen, verwenden Sie stattdessen stattdessen: http://stackoverflow.com/a/5656660/318765 – mgutt

2

Ich denke, Sie werden den Wert lesen und es wieder schreiben, so:

$(element).data('yourKey', $(element).data('yourKey') + 1); 

Immerhin data() ein Funktionsaufruf ist, und das Ergebnis Inkrementieren den Wert selbst nicht ändern, die in sitzt eine interne jQuery-Datenstruktur.

4
var data = parseInt ($.data("data-attr")) + 1; 

$.data("data-attr",data); 
8

Oder, wenn Sie kontrollieren, was Sie speichern, speichern eine Objektreferenz, so dass Sie die Werte für das Objekt modifizieren kann direkt ++ mit:

var $elem = $('<div>'); 
$elem.data('something', {value:1}); 
$elem.data('something').value++; 

console.log($elem.data('something').value); // 2 
+0

Vielen Dank! Während mein Weg in diesem speziellen Fall funktioniert, ist Ihr JavaScripty-Weg das richtige und ist die richtige Antwort für den allgemeinen Fall. Sie können sogar kürzer sein, wenn Sie die Referenz behalten: 'var v = {value: 1}; $ elem.data ('etwas', v); /*...*/ v.value ++; ' – Kobi

0

Es ist so einfach, wie eine Variable zu, speichern nur die .data() Wert, erhöht es und speichern Sie es zurück in

Nehmen wir an, Sie haben eine Zahl in der NumbeR-Datenvariablen festgelegt.

var myNumber = $(selector).data('NumbeR'); 
$(selector).data('NumbeR', myNumber++)