Почему изменения в jQuery $ .fn.data () не изменяют соответствующие атрибуты html 5 data- *?

Вот простой пример, иллюстрирующий поведение:

Учитывая эту разметку html:

и этот код jQuery (с использованием jQuery 1.5.1):

 // read the data alert($("div").data("company")); // returns Microsoft <<< OK! // set the data $("div").data("company","Apple"); alert($("div").data("company")); // returns Apple <<< OK! // attribute selector alert($("div[data-company='Apple']").length); // returns 0 <<< WHY??? // attribute selector again alert($("div[data-company='Microsoft']").length); // returns 1 <<< WHY??? // set the attribute directly $("div").attr("data-company","Apple"); alert($("div[data-company='Apple']").length); // now returns 1 <<< OK! 

Поскольку jQuery автоматически импортирует данные HTML5 * в объект данных jQuery, не следует ли обновлять атрибуты, когда данные изменяются?

Как правило, нет необходимости в roundtripping .data() , если вы согласны в использовании .data () для доступа / установки / изменения данных на элементах DOM. По этой причине имеет смысл избежать служебных издержек производительности доступа к DOM для каждой операции .data() set / modify ( .data() хранит свои значения внутри jQuery.cache ).

Если вы хотите принудительно выполнить поведение в кругообороте, вы можете подписаться на события «setData» или «changeData», а затем нажать обновление .data() в этих событиях до соответствующего элемента DOM через .attr() .

Это правильное поведение в соответствии с документами:

Атрибуты данных вытаскиваются при первом доступе к ресурсу данных, а затем больше не доступны или не изменяются (все значения данных затем сохраняются внутри jQuery).

(от: http://api.jquery.com/data )

  • Как получить позицию перетаскиваемого объекта
  • Как вырваться из jQuery каждый цикл
  • Что такое «традиционный стиль параметризации сериализации» в JQuery
  • Изменение размера элемента div
  • Как включить междоменный запрос на сервере?
  • Можно ли использовать jQuery для получения ширины элемента в процентах или пикселях в зависимости от того, что разработчик указал с помощью CSS?
  • Различать прокрутку вверх / вниз в jquery?
  • jQuery UI: Как изменить цвет ProgressBar?
  • Сортируемые списки JQuery и фиксированные / заблокированные элементы
  • Найти строку текста в элементе и обернуть вокруг него tags span
  • Сделайте что-нибудь, если ширина экрана меньше 960 пикселей
  • Interesting Posts

    Совместное использование classов src / test между модулями в мультимодульном проекте maven

    Скопировать папки с одного сервера Unix на другой?

    Как я могу запустить внешнюю программу с C и проанализировать ее вывод?

    Как настроить страницу «Новая вкладка» как моя домашняя страница в Opera?

    FileUpload для FileStream

    Множественные подстановочные знаки для общих методов делают Java-компилятор (и меня!) Очень запутанным

    Могу ли я заставить ConEmu «отметить для копирования»?

    Кроссплатформенный обмен кодами iPhone / Android

    Как получить доступ к моему домашнему ПК из офиса?

    Как установить java 1.7 runtime на macos 10.9 mavericks?

    Почему в IEnumerable нет метода расширения ForEach?

    Как я могу создать криптографически безопасное псевдослучайное число в C #?

    Почему бы не использовать всегда android: configChanges = “keyboardHidden | orientation”?

    Как использовать NSTimer?

    / show включить эквивалентную опцию в g ++

    Давайте будем гением компьютера.