2013-08-07 37 views
50

Tôi có một tùy chỉnh dữ liệu thuộc tính thiết lập theo mặc định:Nhận dữ liệu thuộc tính jquery vs javascript

data-equipment="0"

Nếu tôi thay đổi nó với jquery sử dụng .data()

$(this).data("equipment", 10)

và sau đó sử dụng getAttribute()

this.getAttribute("data-equipment")

tôi lấy giá trị cũ (0) chứ không phải giá trị mới (10). Nhưng nếu tôi sử dụng

$(this).data("equipment") tôi nhận được giá trị mới (10).

Điều này có nghĩa vụ phải hoạt động như thế này hay tôi đang thiếu thứ gì đó?

Cảm ơn!

+1

'.data()' không thực sự hỗ trợ thuộc tính dữ liệu. Nó chỉ lấy giá trị từ thuộc tính sau đó sử dụng bộ nhớ dữ liệu riêng của nó để giữ nó mà không cần cập nhật thuộc tính. Cá nhân tôi sẽ không sử dụng '.data()' của jQuery cho việc này. –

+0

thuộc tính data- có thể truy cập bằng cách sử dụng element.dataset mà tôi tin rằng không được sử dụng bởi jQuery. – Virus721

Trả lời

45

.data() không hoạt động trên thuộc tính dữ liệu nhưng trong bộ nhớ cache jQuery nội bộ. Ban đầu nếu không tìm thấy bản ghi nhớ cache, dữ liệu được đọc từ thuộc tính tương ứng data- nếu có, nhưng đó là kết thúc hợp tác của chúng.

Nếu nó hoạt động trên thuộc tính, nó sẽ vô dụng vì mục đích của nó vì giá trị thuộc tính phải là chuỗi.

+1

Tôi nghĩ đây là sự khác biệt chính giữa '$ (this) .data (" thiết bị ")' và '$ (this) .attr (" data-equipment ")'. Nếu bạn lấy một số thuộc tính dữ liệu với '$ (this) .data (" thiết bị ")' và thay đổi giá trị thuộc tính bằng '$ (this) .attr (" data-equipment "," some value ")', thì bạn không thể truy xuất giá trị mới với '$ (this) .data (" thiết bị ")' do cơ chế bộ nhớ đệm của jQuery. – beawolf

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