Я хотел бы написать простой плагин jQuery, который отображает встроенные модальные окна под указанными элементами. Моя идея состоит в том, чтобы сценарий автоматически запускался на основе атрибутов данных, указанных в элементах.
Очень простой пример:
<p data-modal-target>Hover over me for an inline modal!</p>
<div data-modal-content data-modal-align="right" data-modal-trigger="hover" data-modal-offset="10px"><!-- any desired syntax can go here --></div>
Мне просто интересно, data-modal-target
верен ли приведенный выше пример или он должен быть data-modal-target="true"
? Меня не интересует что-либо более дрянное, чем IE9 и т. Д., Мое единственное требование - это валидный HTML5.
Ответы:
Допустимые, но не логические.
В спецификации настраиваемых атрибутов данных не упоминаются какие-либо изменения в обработке пустых атрибутов, поэтому здесь применяются общие правила для пустых атрибутов :
Таким образом, вам разрешено использовать пустые пользовательские атрибуты данных, но требуется специальная обработка, чтобы использовать их как логические.
Когда вы обращаетесь к пустому атрибуту, его значение равно
""
. Поскольку это ложное значение, вы не можете просто использовать егоif (element.dataset.myattr)
для проверки наличия атрибута.Вы должны использовать
element.hasAttribute('myattr')
илиif (element.dataset.myattr !== undefined)
вместо.Ответ Ллойда неверен. Он упоминает ссылку на микросинтаксис логических атрибутов, но
data-*
атрибуты не указаны как логические в спецификации.источник
scriptAttrs
не нравятся простыеdefer
значения, но онdefer: ""
должен помочь. Спасибо!Да, совершенно верно. В вашем случае это
data-modal-target
будет логический атрибут:источник
if ($('p').data('modal-target'))
не сработает: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
приведет к пустой строке, которая является ложной (Chrome 32), такой же результат с jQueryДа, это допустимый синтаксис, чтобы опустить значение для настраиваемого атрибута данных.
"Атрибуты можно указать четырьмя различными способами:
Пустой синтаксис атрибута Просто имя атрибута. Значение неявно является пустой строкой. [...] " https://developers.whatwg.org/syntax.html#attributes-0
источник
С одной стороны, он проходит валидатор 16.5.7 https://validator.w3.org/nu/#textarea :
С другой стороны, HTML5 не говорит в спецификации
data-
атрибутов, что они являются логическими: https://www.w3.org/TR/html5/dom.html#custom-data-attribute, хотя он очень четко говорит, что для других логических такие атрибуты, какchecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedисточник