.data () jQuery робить кілька речей, але він не додає дані в DOM як атрибут. Використовуючи його для захоплення атрибута даних, перше, що він робить, це створити об’єкт даних jQuery і встановити значення об'єкта атрибуту даних. Після цього він по суті відокремлюється від атрибута даних.
Приклад:
<div data-foo="bar"></div>
Якщо ви схопили значення атрибута за допомогою .data('foo')
, він поверне "бар", як ви очікували. Якщо потім змінити атрибут за допомогою, .attr('data-foo', 'blah')
а потім пізніше використовувати .data('foo')
для захоплення значення, він поверне "бар", навіть якщо DOM каже data-foo="blah"
. Якщо ви використовуєте .data()
для встановлення значення, воно буде змінювати значення в об'єкті jQuery, але не в DOM.
В основному, .data()
це для встановлення або перевірки значення даних об’єкта jQuery. Якщо ви перевіряєте його, а його ще немає, він створює значення на основі атрибута даних, який знаходиться в DOM. .attr()
призначений для встановлення або перевірки значення атрибута елемента DOM і не торкнеться значення даних jQuery. Якщо вам потрібні обидва для зміни, ви повинні використовувати і те, .data()
і .attr()
. В іншому випадку дотримуйтесь того чи іншого.
.data()
якщо у вас фактично немає причин використовувати.attr()
.