.data () của jQuery thực hiện một vài điều nhưng nó không thêm dữ liệu vào DOM làm thuộc tính. Khi sử dụng nó để lấy một thuộc tính dữ liệu, điều đầu tiên nó làm là tạo một đối tượng dữ liệu jQuery và đặt giá trị của đối tượng thành thuộc tính dữ liệu. Sau đó, về cơ bản, nó được tách ra khỏi thuộc tính dữ liệu.
Thí dụ:
<div data-foo="bar"></div>
Nếu bạn lấy giá trị của thuộc tính bằng cách sử dụng .data('foo')
, nó sẽ trả về "thanh" như bạn mong đợi. Nếu sau đó bạn thay đổi thuộc tính bằng cách sử dụng .attr('data-foo', 'blah')
và sau đó sử dụng .data('foo')
để lấy giá trị, nó sẽ trả về "thanh" mặc dù DOM nói data-foo="blah"
. Nếu bạn sử dụng .data()
để đặt giá trị, nó sẽ thay đổi giá trị trong đối tượng jQuery nhưng không thay đổi trong DOM.
Về cơ bản, .data()
là để thiết lập hoặc kiểm tra giá trị dữ liệu của đối tượng jQuery. Nếu bạn đang kiểm tra nó và nó chưa có, nó sẽ tạo ra giá trị dựa trên thuộc tính dữ liệu có trong DOM. .attr()
là để thiết lập hoặc kiểm tra giá trị thuộc tính của phần tử DOM và sẽ không chạm vào giá trị dữ liệu jQuery. Nếu bạn cần cả hai để thay đổi, bạn nên sử dụng cả hai .data()
và .attr()
. Nếu không, hãy gắn bó với cái này hay cái khác.
.data()
trừ khi bạn thực sự có lý do để sử dụng.attr()
.