2010-04-22 28 views

Trả lời

23

này trông hơi kỳ quặc, nhưng theo các tài liệu .data() trả về tất cả các lĩnh vực dữ liệu như một đối tượng, vì vậy bạn có thể thay đổi giá trị của nó trực tiếp:

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

cả hai tùy chọn làm việc:

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

Lấy dữ liệu trả về giá trị dự kiến:.

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

+1 Đẹp bắt !! – Reigel

+1

Do hiệu suất bạn nên tránh gọi dữ liệu hai lần, vì vậy hãy sử dụng dữ liệu này thay thế: http://stackoverflow.com/a/5656660/318765 – mgutt

2

Tôi nghĩ rằng bạn sẽ phải đọc các giá trị và viết nó trở lại, vì vậy:

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

Sau khi tất cả, data() là một cuộc gọi chức năng, và incrementing kết quả sẽ không sửa đổi các giá trị riêng của mình, mà ngồi trong một cấu trúc dữ liệu jQuery bên trong.

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

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

Hoặc, nếu bạn kiểm soát những gì bạn đang lưu trữ, lưu trữ một tham chiếu đối tượng, do đó bạn có thể sửa đổi các giá trị trên đối tượng trực tiếp sử dụng ++:

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

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

Cảm ơn! Trong khi cách của tôi làm việc trong trường hợp cụ thể này, bạn là cách JavaScripty hơn để làm điều đó, và là câu trả lời đúng cho trường hợp chung. Bạn thậm chí có thể ngắn hơn nếu bạn giữ tham chiếu: 'var v = {value: 1}; $ elem.data ('cái gì đó', v); /*...*/ v.value ++; ' – Kobi

0

Nó đơn giản như tăng một biến, chỉ cần lưu trữ các giá trị .data(), tăng nó và lưu nó lại trong

Giả sử bạn có một số được đặt trong biến số liệu NumbeR.

var myNumber = $(selector).data('NumbeR'); 
$(selector).data('NumbeR', myNumber++) 
Các vấn đề liên quan