Ответ 1
data
не устанавливает атрибуты data-*
. Он управляет кэшем данных, не связанным с атрибутами data-*
. Он инициализирует атрибуты data-*
, если они есть, но никогда не записывает их. Чтобы записать атрибут, используйте attr
.
Пример: Обновлен скрипт
var div = $("<div />")
$(div).attr("data-foo", "bar")
console.log($(div)[0].outerHTML)
То, что вы видите, является лишь одним из многих способов, которыми это может быть удивительно. Другим является то, что если ваша разметка <div id="elm" data-foo="bar"></div>
и в какой-то момент вы используете $("#elm").data("foo")
для получения значения (и оно действительно будет "bar"
), то вы выполняете $("#elm").data("foo", "update")
, атрибут остается data-foo="bar"
, но данные управляемый data
, теперь имеет foo
, равный "update"
. Но приведенное выше правило объясняет это: data
никогда не записывает в data-*
attrs.