.data () из jQuery делает несколько вещей, но не добавляет данные в DOM как атрибут. При его использовании для получения атрибута данных первое, что он делает, - это создание объекта данных jQuery и установка значения объекта в атрибут данных. После этого он по существу отделен от атрибута данных.
Пример:
<div data-foo="bar"></div>
Если вы взяли значение атрибута с помощью .data('foo'), он вернул бы "bar", как вы и ожидали. Если вы затем измените атрибут с помощью, .attr('data-foo', 'blah')а затем с помощью, .data('foo')чтобы получить значение, он вернет «бар», даже если DOM говорит data-foo="blah". Если вы используете .data()для установки значения, оно изменит значение в объекте jQuery, но не в DOM.
В основном, .data()для установки или проверки значения данных объекта jQuery. Если вы проверяете его, а у него его еще нет, он создает значение на основе атрибута данных, который находится в DOM. .attr()предназначен для установки или проверки значения атрибута элемента DOM и не касается значения данных jQuery. Если вам нужно, чтобы они оба изменились, вы должны использовать оба .data()и .attr(). В противном случае, придерживайтесь одного или другого.
.data()если у вас нет причин использовать.attr().