Jquery data не работает

jquery data () не работает

У меня проблемы с функцией данных jquery.

$ (e.target) .data («unitId») не определен.

Некоторое время я пытался решить эту проблему, но не могу найти, что не так с моим кодом.

Кто-нибудь видит, что здесь не так?

2 ответа

Когда вы запрашиваете .data(«dataId») с помощью camelcase, jQuery превращает его в запрос атрибута «data-data-id» .

Вы можете исправить это, не используя Camelcase. Например, если вы используете строчные буквы для имени атрибута как в HTML, так и в jQuery, все работает нормально. Или вы можете изменить HTML, чтобы использовать «data-data-id» в качестве имени атрибута, и оставить верблюжий регистр в HTML.

Это объяснение взято из документа jQuery:

$( «div» ).data( «lastValue» ) === 43;

Код . выше правильно относится к Атрибут элемента data-last-value . В случае, если данные не сохранены с переданным ключом jQuery ищет среди атрибутов элемент, преобразуя строку в верблюжьем корпусе в пунктирную строку, а затем добавление данных к результату. Итак, строка lastValue преобразуется к data-last-value .

Вместо этого попробуйте:

Всегда старайтесь использовать строчные буквы в разметке и коде, чтобы не столкнуться с такими проблемами.

Например, учитывая следующий HTML:

Весь следующий код jQuery будет работать.

Второй оператор приведенного выше кода правильно относится к Атрибут элемента data-last-value . В случае, если данные не сохранены с переданным ключом jQuery ищет среди атрибутов элемент, преобразование строки в верблюжьем регистре в пунктирную строку, а затем добавление данных к результату . Итак, строка lastValue преобразуется кому: data-last-value .

Источник

jQuery .data () не работает, но .attr () работает

Простите меня за то, что я не уточнил по этому поводу. У меня такой странный баг. После загрузки документа я зацикливаю некоторые элементы, которые изначально были data-itemname=»» , и устанавливаю эти значения, используя .attr(«data-itemname», «someValue») .

Проблема: когда я позже перебираю эти элементы, elem.data().itemname я получаю «» , если да elem.attr(«data-itemname») , то получаю «someValue» . Это похоже на то, что .data() геттер jQuery получает только те элементы, которые изначально заданы как содержащие какое-то значение, но если они изначально пусты, а затем установлены, то .data() не получает значение позже.

Я пытался воссоздать эту ошибку, но не мог.

редактировать

Кроме того, фрагменты из приведенной выше ссылки .

Несколько дней назад я столкнулся с подобной «ошибкой» при работе с атрибутами данных HTML5 .data() и .attr(‘data-name’) для них.

Поведение, которое вы описываете, не является ошибкой, а является преднамеренным.

.data() Вызов является особенным — он не только получить HTML5 атрибуты данных также попытки оценить / синтаксический анализ атрибутов. Таким образом, с таким атрибутом, как data-myjson=’<"hello":"world">‘ при извлечении через, .data() будет возвращена строка, Object а при извлечении через .attr() . См. Пример jsfiddle.

Поскольку .data() дополнительная обработка, jQuery сохраняет результаты оценки атрибутов $.cache — в конце концов, после того, как атрибут данных был оценен, было бы бесполезно переоценивать при каждом .data() вызове — тем более, что переменные данных могут содержать сложные строки JSON.

Я сказал все это, чтобы сказать следующее: после получения атрибута с помощью .data() любых изменений, сделанных с помощью .attr(‘data-myvar’, ») , не будут видны последующие .data() вызовы. Проверьте это на jsfiddle.

Чтобы избежать этой проблемы , не смешивайте .data и .attr() звонки. Используйте то или другое.

Источник

jQuery .data () не работает, но .attr () работает

Простите меня за то, что я не стал более конкретным по этому поводу. У меня такой странный баг. После загрузки документа я зацикливаю некоторые элементы, которые изначально имеют data-itemname=»» , и устанавливаю эти значения с помощью .attr(«data-itemname», «someValue») .

Проблема: когда я позже перебираю эти элементы, если я выполняю elem.data().itemname , я получаю «» , но если я выполняю elem.attr(«data-itemname») , я получаю «someValue» . Это похоже на то, что геттер jQuery .data() получает только те элементы, для которых изначально задано некоторое значение, но если они изначально пусты, а затем установлены, то .data() не получит значение позже.

Я пытался воссоздать эту ошибку, но не смог.

Изменить

Кроме того, фрагменты из приведенной выше ссылки .

6 ответов

Несколько дней назад я столкнулся с подобной «ошибкой» при работе с .data() и .attr(‘data-name’) для атрибутов данных HTML5.

Поведение, которое вы описываете, не является ошибкой, а является преднамеренным.

Вызов .data() особенный — он не только извлекает атрибуты данных HTML5, но также пытается оценить / проанализировать атрибуты. Таким образом, с таким атрибутом, как data-myjson=’<"hello":"world">‘ , при извлечении через .data() вернет Object , а при извлечении через .attr() будет возвращена строка. См. пример jsfiddle.

Поскольку .data() выполняет дополнительную обработку, jQuery сохраняет результаты оценки атрибута в $.cache — в конце концов, после того, как атрибут данных был оценен, было бы бесполезно повторять оценку при каждом вызове .data() — тем более, что переменные данных могут содержать сложные строки JSON.

Я сказал все это, чтобы сказать следующее: После получения атрибута через .data() любые изменения, внесенные .attr(‘data-myvar’, ») , не будут видны при последующих вызовах .data() . Протестируйте это на jsfiddle.

Чтобы избежать этой проблемы, не смешивайте вызовы .data и .attr() . Используйте один или другой.

Вы должны установить данные с помощью .data(‘itemname’, ‘someValue’); . Использование .attr() для установки атрибутов данных не сработает: http://jsfiddle.net/ThiefMaster/YHsKx /

Однако вы можете предоставить встроенные значения, используя, например,

Почему бы тебе просто не использовать .data() везде?

Вы также можете объявить значения по умолчанию встроенными в HTML, что тоже нормально.

Если вы хотите это изменить, просто сделайте

И чтобы полностью удалить его, вы можете вызвать

Вам действительно стоит постараться и избегать использования .attr(«data-*») , я не знаю, почему вы все равно захотите это сделать.

Это потому, что имя атрибута data-itemname . Вы не можете использовать — в сокращенной записи obj.attribute (obj.data-itemname будет интерпретироваться как «obj.data minus itemname»).

.attr(«data-itemname», «someValue») изменяет DOM.

.data(«itemname», «someValue») изменяет кеш jQuery.

Чтобы это работало в следующем Javascript и в дополнение к CSS, вы должны установить оба.

Это результат недопонимания: data НЕ является средством доступа для data-* атрибуты . И больше, и меньше.

data — это средство доступа к кешу данных jQuery на элементе. Этот кеш инициализируется из атрибутов data-* , если они есть, но data никогда не записывает в атрибуты, и изменение атрибута не меняет кеш данных после инициализации:

data также массирует то, что находит, различными способами, угадывая типы данных, создавая data(«answer») для элемента с data-answer=»42″ числом, а не строкой, или даже анализируя вещи как JSON, если они выглядят как JSON:

Если вы хотите использовать атрибуты (как для чтения, так и для их установки), используйте attr , не data . attr метод доступа к атрибутам.

Источник

Читайте также:  Как настроить роутера d link dir 320
Оцените статью