Ich möchte ein einfaches jQuery-Plugin schreiben, das Inline-Modalitäten unter bestimmten Elementen anzeigt. Meine Idee ist, dass das Skript basierend auf den auf Elementen angegebenen Datenattributen automatisch initiiert wird.
Ein sehr einfaches Beispiel:
<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>
Ich frage mich nur, ob data-modal-target
das obige Beispiel gültig ist oder sein muss data-modal-target="true"
. Ich kümmere mich nicht um etwas Mistigeres als IE9 usw. Meine einzige Anforderung ist, dass es gültiges HTML5 ist.
Antworten:
Gültig, aber sie sind nicht boolesch.
In der Spezifikation für benutzerdefinierte Datenattribute werden keine Änderungen an der Behandlung leerer Attribute erwähnt. Daher gelten hier die allgemeinen Regeln für leere Attribute :
Sie dürfen also leere benutzerdefinierte Datenattribute verwenden, aber eine spezielle Behandlung ist erforderlich, um sie als Boolesche Werte zu verwenden.
Wenn Sie auf ein leeres Attribut zugreifen, lautet sein Wert
""
. Da es sich um einen falschen Wert handelt, können Sie nicht einfachif (element.dataset.myattr)
überprüfen, ob ein Attribut vorhanden ist.Sie sollten
element.hasAttribute('myattr')
oderif (element.dataset.myattr !== undefined)
stattdessen verwenden.Lloyds Antwort ist falsch. Er erwähnt den Link zu den Booleschen Attributen Mikrosyntax, aber
data-*
Attribute werden in der Spezifikation nicht als Boolesche Werte angegeben.quelle
scriptAttrs
mag die Einstellung von jQuery keinen einfachendefer
Wert, aber adefer: ""
sollte den Trick machen. Vielen Dank!Ja, vollkommen gültig. In Ihrem Fall
data-modal-target
würde dies ein boolesches Attribut darstellen:quelle
if ($('p').data('modal-target'))
funktioniert also nicht: stackoverflow.com/questions/16864999/… .element.dataset.modalTarget
wäre, würde eine leere Zeichenfolge erzeugen, die falsch ist (Chrome 32). Das gleiche Ergebnis mit jQueryJa, es ist eine gültige Syntax, den Wert für ein benutzerdefiniertes Datenattribut wegzulassen.
"Attribute können auf vier verschiedene Arten angegeben werden:
Leere Attributsyntax Nur der Attributname. Der Wert ist implizit die leere Zeichenfolge. [...] " https://developers.whatwg.org/syntax.html#attributes-0
quelle
Einerseits besteht es den Validator 16.5.7 https://validator.w3.org/nu/#textarea :
Andererseits sagt HTML5 in der Spezifikation von
data-
Attributen nicht, dass sie boolesch sind: https://www.w3.org/TR/html5/dom.html#custom-data-attribute während dies für andere boolesche Werte sehr deutlich gesagt wird Attribute wiechecked
https://www.w3.org/TR/html5/forms.html#attr-input-checkedquelle