Имеются ли допустимые атрибуты данных HTML5?

Я бы хотел написать простой плагин jQuery, который отображает встроенные модалы в определенных элементах. Моя идея заключается в том, чтобы сценарий автоматически инициализировался на основе атрибутов данных, указанных в элементах.

Очень простой пример:

Hover over me for an inline modal!

Мне просто интересно, действительно ли data-modal-target в приведенном выше примере действителен или же он должен быть data-modal-target="true" ? Я не забочусь о чем-то crappier, чем IE9 и т. Д., Мое единственное требование – это быть допустимым HTML5.

Да, отлично. В вашем случае data-modal-target будет представлять собой логический атрибут:

2.4.2 Логические атрибуты

Наличие логического атрибута для элемента представляет истинное значение, а отсутствие атрибута представляет ложное значение.

Спецификация атрибутов пользовательских данных не упоминает никаких изменений в обработке пустых атрибутов, поэтому здесь применяются общие правила о пустых атрибутах :

Определенные атрибуты могут быть указаны путем указания имени атрибута без значения.

В следующем примере атрибуту disabled присваивается пустой синтаксис атрибута:

  

Обратите внимание, что пустой синтаксис атрибута в точности эквивалентен заданию пустой строки как значения для атрибута, как в следующем примере.

  

Таким образом, вам разрешено использовать несанкционированные атрибуты пользовательских данных, но специальная обработка должна использоваться в качестве логических.

Если вы element.dataset доступ к атрибуту через element.dataset :

  • Когда присутствует пустой атрибут, это значение равно "" .
  • Когда атрибут отсутствует, вы становитесь undefined .

Поэтому вы не можете просто проверить, как if (element.dataset.myattr) потому что он всегда будет false .

Вы можете и должны проверять логические атрибуты, как if (element.dataset.myattr !== undefined) .


Ответ Ллойда неверен. Он упоминает ссылку на логические атрибуты microsyntax, но атрибуты data-* не указаны как boolean в spec.

Да, это синтаксис, чтобы опустить значение для атрибута пользовательских данных.

«Атрибуты могут быть определены четырьмя различными способами:

Синтаксис пустой атрибута Просто имя атрибута. Значение неявно является пустой строкой. […] ” https://developers.whatwg.org/syntax.html#attributes-0

С одной стороны, он передает валидатор 16.5.7 https://validator.w3.org/nu/#textarea :

     a     

С другой стороны, HTML5 не указывает в спецификации атрибутов data- что они являются логическими: https://www.w3.org/TR/html5/dom.html#custom-data-attribute, в то время как в нем сказано, что очень четко для другие логические атрибуты, например, https://www.w3.org/TR/html5/forms.html#attr-input-checked

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