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