.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().