Ответ 1
Метод .data
не изменяет data-
HTML data-
; он изменяет переменную, которая хранится внутри jQuery.
Если вам действительно нужно/нужно изменить data-
, сделайте это явно с помощью .attr()
:
$(el).attr('data-original-title', str);
Однако это не изменит значение, возвращаемое .data
. jQuery будет извлекать это значение из data-
HTML data-
только в том случае, если он не может найти значение, сохраненное внутри. Если после изменения атрибута HTML вы снова получите $(el).data('original-title')
, вы увидите, что он не изменился.
Если это проблема, используйте метод .removeData()
чтобы удалить внутренне сохраненное значение. В следующий раз, когда вы используете .data()
, jQuery увидит, что он отсутствует и извлекает data-
HTML data-
.
Взгляните: http://jsfiddle.net/mblase75/LHCUK/
HTML:
<p id="p" data-title="blah"></p>
JQuery:
console.log($('#p').data('title')); // returns "blah"
// alter the attribute directly
$('#p').attr('data-title','whooo'); // data-title="whooo"
// test if .data is changed
console.log($('#p').data('title')); // still returns "blah"
// delete the .data() value
$('#p').removeData('title');
// now fetch it again -- it will retrieve the new data- attribute
console.log($('#p').data('title')); // returns "whooo"
Теперь, на практике, вам не стоит беспокоиться об этом. Просто помните, что data-
представляет начальное значение переменной .data()
и необязательно текущее значение этой переменной, и все будет в порядке.
В итоге: Метод .data()
извлекает значение из элемента HTML один раз, когда документ загружается, и не будет делать этого снова, пока переменная хранится внутри.