Является ли использование .data () для получения значения атрибутов data- * хорошей идеей? - PullRequest
5 голосов
/ 03 мая 2011

В моем проекте я в настоящее время использую некоторые пользовательские атрибуты data- * в своем HTML, чтобы передать некоторые дополнительные данные, которые будут использоваться jQuery. Я нашел метод .data() и заметил, что если у меня есть атрибут data- data-my-attribute, я могу получить его значение в jQuery, выбрав элемент с атрибутом и вызвав .data("my-attribute").

Я предположил, что это был способ, которым это должно было использоваться (не смотрел в документации), и использовал его через мой код jQuery. Однако теперь я заметил, что когда я помещаю, например, строку "000005643" в атрибут HTML data- *, .data("my-attribute") возвращает 5643, а .attr("data-my-attribute") возвращает "000005643". Где последний то, что я хотел. Это привело меня к поиску документации и на самом деле обнаружило, что есть нечто большее, чем я думал. Кроме того, я никогда не видел текст или пример, который указывает, что вы должны использовать .data() для получения значений атрибутов data- *. Это беспокоит меня, что я делаю что-то в корне неправильно.

Так я должен прекратить и воздерживаться от использования .data() таким образом или нет? Если нет, не могли бы вы дать мне ссылку на документацию о функции .data(), которая объясняет это использование.

Ответы [ 2 ]

8 голосов
/ 03 мая 2011

Метод data(), возвращающий атрибуты HTML5 data-*, был введен в 1.4.3 .

Начиная с jQuery 1.4.3, атрибуты данных HTML 5 будут автоматически добавляться в объект данных jQuery.

Делается каждая попытка преобразовать строку в значение JavaScript (включая логические значения, числа, объекты, массивы и ноль), в противном случае она остается в виде строки. Чтобы получить атрибут значения в виде строки без какой-либо попытки его преобразования, используйте метод attr ().

Источник .

Похоже, jQuery уверен, что вам нужен номер, поэтому он возвращает Number для вас, а не String.

Если вы хотите использовать его как строку, используйте attr().

1 голос
/ 03 мая 2011

На самом деле я работаю над переносом этой функциональности на Zepto.Да, в спецификации data-HTML нет ничего плохого, но это просто реализация jQuery.Он пытается обойти тот факт, что данные не очень хорошо обрабатывают нестандартные строки, а затем он пытается придумать и вытащить для вас такие значения, как null, int и float.Я полагаю, что обходной путь - поместить символ строки перед вашим значением и удалить его при извлечении.Либо так, либо используйте attr ('data-') - хотя переход между .data и .attr может привести к различным результатам, как вы заметили.Придерживайтесь одного или другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...