2010-04-22 50 views

回答

23

這看起來有點奇怪,但根據.data()返回所有數據字段作爲一個對象,這樣你就可以直接更改其值的文檔:

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

上述兩種情況:

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

檢索數據返回預期值。

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

+1 Nice catch !! – Reigel 2010-04-22 08:12:46

+1

由於性能,您應該避免兩次調用數據,因此請使用以下代碼:http://stackoverflow.com/a/5656660/318765 – mgutt 2012-08-14 06:49:55

2

我想你一定要讀值,並將其寫回,所以:

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

畢竟,data()是一個函數調用,並增加其結果不會修改本身的價值,它坐落在一個內部的jQuery數據結構。

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

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

或者,如果你控制你存儲什麼,存儲對象的引用,因此您可以直接使用++修改對象的值:

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

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

謝謝!雖然我的方式適用於這種特殊情況,但您的做法更多的是JavaScripty方式,並且是一般情況下的正確答案。如果保留引用,則可能會更短:'var v = {value:1}; $ elem.data('something',v); /*...*/ v.value ++;' – Kobi 2010-05-16 04:35:41

0

這是爲增加變量一樣簡單,只是存儲。數據()值,增加它和它存回

假設您在NumbeR數據變量中設置了一個數字。

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