2011-08-23 37 views
16

Tôi sử dụng thuộc tính dữ liệu rộng rãi để quản lý dữ liệu trong các sự kiện phía ứng dụng khách. Có thể gán giá trị động cho thuộc tính dữ liệu bằng javascript hoặc jquery không?Đặt giá trị động cho thuộc tính dữ liệu bằng cách sử dụng jquery

<li data-class_value="somevalue" class="myclass"></li> 


$('.myclass').click(function(){ 
    $(this).data('class_value') = "new value"; 
}); 

Trên đây mã javascript ném lỗi:

"Uncaught ReferenceError: Invalid left-hand side in assignment".

Ai đó có thể xin vui lòng cho tôi biết thế nào điều này có thể đạt được?

Trả lời

21

Bạn cần phải làm

$(this).data('class_value', "new value"); 
+0

Nhờ làm việc như một nét duyên dáng ... –

2

$(this).data('class_value','new value') ;

.data

26

Tôi tin rằng câu trả lời ở trên sẽ chỉ thiết lập các đối tượng dữ liệu trên yếu tố đó trong jQuery.

Nếu bạn cần phải thiết lập các đĩa dữ liệu HTML thực tế * thuộc tính, bạn sẽ cần phải sử dụng này:

$(this).attr("data-class_value", "new value"); 

Hãy coi chừng lấy HTML5 đĩa dữ liệu * thuộc tính theo cách này là tốt, như mặc dù bạn có thể sử dụng phím tắt $(this).data("class_value"); để truy xuất chúng, các lần truy xuất tiếp theo sẽ sử dụng giá trị được lưu trong bộ nhớ cache trong đối tượng dữ liệu jQuery.

Từ jQuery docs:

The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

Nguồn: jQuery caching of data attributes

+3

Đó bộ nhớ đệm của các thuộc tính dữ liệu ăn vài giờ, cảm ơn! – Heihachi

+0

Bạn làm cách nào để khắc phục sự cố bộ nhớ đệm? Tôi đã thử '$ (this) .removeAttr (" data-class_value "," new value ");' nhưng tất nhiên nó không hoạt động. Bất kì manh mối nào? – kevllar

+0

@kevllar 'removeAttr' chỉ nhận một đối số. Vì vậy, nó sẽ không đặt giá trị mới cho bạn. Thay vào đó, bạn cần sử dụng 'attr'. – jjeaton

Các vấn đề liên quan