In letzter Zeit habe ich immer mehr über Personen gelesen, die benutzerdefinierte Attribute in ihren HTML-Tags verwenden, hauptsächlich um einige zusätzliche Datenbits für die Verwendung in Javascript-Code einzubetten.
Ich hatte gehofft, Feedback zu erhalten, ob die Verwendung benutzerdefinierter Attribute eine gute Vorgehensweise ist oder nicht und welche Alternativen es gibt.
Es scheint, dass es sowohl den serverseitigen als auch den clientseitigen Code wirklich vereinfachen kann, aber es ist auch nicht W3C-kompatibel.
Sollten wir benutzerdefinierte HTML-Attribute in unseren Web-Apps verwenden? Warum oder warum nicht?
Für diejenigen, die benutzerdefinierte Attribute für eine gute Sache halten: Was sollten Sie bei der Verwendung beachten?
Für diejenigen, die benutzerdefinierte Attribute für schlecht halten: Welche Alternativen verwenden Sie, um etwas Ähnliches zu erreichen?
Update: Ich interessiere mich hauptsächlich für die Gründe für die verschiedenen Methoden sowie für die Gründe, warum eine Methode besser ist als eine andere. Ich denke, wir können uns alle 4-5 verschiedene Wege einfallen lassen, um dasselbe zu erreichen. (versteckte Elemente, Inline-Skripte, zusätzliche Klassen, Analysieren von Informationen aus IDs usw.).
Update 2: Es scheint, dass die HTML 5- data-
Attributfunktion hier viel Unterstützung bietet (und ich stimme eher zu, es sieht nach einer soliden Option aus). Bisher habe ich nicht viel an Widerlegungen für diesen Vorschlag gesehen. Gibt es Probleme / Fallstricke bei der Verwendung dieses Ansatzes? Oder ist es einfach eine "harmlose" Ungültigmachung der aktuellen W3C-Spezifikationen?
Antworten:
HTML 5 erlaubt explizit benutzerdefinierte Attribute, die mit beginnen
data
. So ist zum Beispiel<p data-date-changed="Jan 24 5:23 p.m.">Hello</p>
gültig. Da es offiziell von einem Standard unterstützt wird, denke ich, dass dies die beste Option für benutzerdefinierte Attribute ist. Außerdem müssen Sie andere Attribute nicht mit Hacks überladen, damit Ihr HTML-Code semantisch bleibt.Quelle: http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes
quelle
Hier ist eine Technik, die ich kürzlich verwendet habe:
Das Kommentarobjekt ist mit dem übergeordneten Element (dh #someelement) verknüpft.
Hier ist der Parser: http://pastie.org/511358
Um die Daten für ein bestimmtes Element abzurufen, rufen Sie einfach
parseData
einen Verweis auf dieses Element auf, der als einziges Argument übergeben wurde:Es kann prägnanter sein als das:
Darauf zuzugreifen:
Der einzige Nachteil dieser Verwendung besteht darin, dass sie nicht mit selbstschließenden Elementen (z. B.
<img/>
) verwendet werden kann, da sich die Kommentare innerhalb des Elements befinden müssen, um als Daten dieses Elements betrachtet zu werden.EDIT :
Bemerkenswerte Vorteile dieser Technik:
Hier ist der Parser-Code (kopiert vom obigen Hyperlink http://pastie.org/511358 , falls er auf pastie.org nicht mehr verfügbar sein sollte):
quelle
Sie können ein beliebiges Attribut erstellen, wenn Sie ein Schema für Ihre Seite angeben.
Beispielsweise:
Füge das hinzu
Facebook (sogar Tags)
quelle
Der einfachste Weg, die Verwendung benutzerdefinierter Attribute zu vermeiden, besteht darin, vorhandene Attribute zu verwenden.
Verwenden Sie aussagekräftige, relevante Klassennamen. Führen
Sie beispielsweise Folgendes aus :
type='book'
undtype='cd'
, um Bücher und CDs darzustellen. Klassen sind viel besser, um darzustellen, was etwas IST .z.B
class='book'
Ich habe in der Vergangenheit benutzerdefinierte Attribute verwendet, aber ehrlich gesagt besteht keine Notwendigkeit dafür, wenn Sie vorhandene Attribute auf semantisch sinnvolle Weise verwenden.
Nehmen wir an, Sie haben eine Website mit Links zu verschiedenen Arten von Geschäften. Sie könnten Folgendes verwenden:
CSS-Styling könnte Klassen wie: verwenden.
Im obigen Beispiel sehen wir, dass beide Links zu Geschäften sind (im Gegensatz zu den anderen nicht verwandten Links auf der Site) und einer ein CD-Laden ist und der andere ein Buchladen.
quelle
Betten Sie die Daten in den Dom ein und verwenden Sie Metadaten für jQuery .
Alle guten Plug-Ins unterstützen das Metadaten-Plugin (wobei Optionen pro Tag zulässig sind).
Es ermöglicht auch unendlich komplexe Daten / Datenstrukturen sowie Schlüssel-Wert-Paare.
ODER
ODER
Dann holen Sie sich die Daten wie folgt:
quelle
Ich sehe kein Problem darin, vorhandene XHTML-Funktionen zu verwenden, ohne etwas zu beschädigen oder Ihren Namespace zu erweitern. Schauen wir uns ein kleines Beispiel an:
Wie füge ich some_content ohne zusätzliche Attribute zusätzliche Informationen hinzu? Was ist mit dem Hinzufügen eines weiteren Tags wie dem folgenden?
Es behält die Beziehung über eine genau definierte ID / Erweiterung "_extended" Ihrer Wahl und durch ihre Position in der Hierarchie bei. Ich verwende diesen Ansatz oft zusammen mit jQuery und ohne Ajax-ähnliche Techniken zu verwenden.
quelle
Nein. Versuchen Sie stattdessen so etwas:
quelle
Ich verwende keine benutzerdefinierten Attribute, weil ich XHTML ausgeben möchte, weil ich möchte, dass die Daten von Software von Drittanbietern maschinenlesbar sind (obwohl ich das XHTML-Schema erweitern könnte, wenn ich wollte).
Als Alternative zu benutzerdefinierten Attributen finde ich meistens die ID- und Klassenattribute (z. B. wie in anderen Antworten erwähnt) ausreichend.
Beachten Sie auch Folgendes:
Wenn die zusätzlichen Daten sowohl für Menschen als auch für Maschinen lesbar sein sollen, müssen sie mit (sichtbaren) HTML-Tags und Text anstatt als benutzerdefinierte Attribute codiert werden.
Wenn es nicht für Menschen lesbar sein muss, kann es möglicherweise mit unsichtbaren HTML-Tags und Text codiert werden .
Einige Benutzer machen eine Ausnahme: Sie lassen benutzerdefinierte Attribute zu, die zur Laufzeit von Javascript auf der Clientseite zum DOM hinzugefügt werden. Sie halten dies für in Ordnung: Da die benutzerdefinierten Attribute nur zur Laufzeit zum DOM hinzugefügt werden, enthält der HTML-Code keine benutzerdefinierten Attribute.
quelle
Wir haben einen webbasierten Editor erstellt, der eine Teilmenge von HTML versteht - eine sehr strenge Teilmenge (die von Mail-Clients fast überall verstanden wird). Wir müssen Dinge wie
<td width="@INSWIDTH_42@">
in der Datenbank ausdrücken , aber das können wir nicht im DOM haben, da sonst der Browser, in dem der Editor ausgeführt wird, ausflippt (oder eher ausflippt als über benutzerdefinierte Attribute ausflippt). . Wir wollten Drag & Drop, also war es nicht möglich, es rein in das DOM zu stellen, ebenso wie jquerys.data()
(die zusätzlichen Daten wurden nicht richtig kopiert). Wir brauchten wahrscheinlich auch die zusätzlichen Daten, um für die Fahrt mitzukommen.html()
. Am Ende haben wir uns für die Verwendung<td width="1234" rs-width="@INSWIDTH_42@">
während des Bearbeitungsprozesses entschieden. Wenn wir dann alles veröffentlichen, entfernen wirwidth
eine Regex-Suche und zerstören sies/rs-width=/width=/g
.Zuerst war der Typ, der das meiste davon schrieb, der Validierungs-Nazi zu diesem Thema und versuchte alles, um unser benutzerdefiniertes Attribut zu vermeiden, aber am Ende stimmte er zu, als nichts anderes für ALLE unsere Anforderungen zu funktionieren schien. Es half, als er erkannte, dass das benutzerdefinierte Attribut niemals in einer E-Mail erscheinen würde. Wir haben überlegt, unsere zusätzlichen Daten zu verschlüsseln
class
, aber entschieden, dass dies das größere von zwei Übeln sein würde.Persönlich ziehe ich es vor , Dinge sauber zu halten und Validatoren usw. zu bestehen, aber als Angestellter des Unternehmens muss ich daran denken, dass meine Hauptverantwortung darin besteht, die Sache des Unternehmens voranzutreiben (so schnell wie möglich so viel Geld zu verdienen), nicht die meines egoistischen Wunsches nach technische Reinheit. Werkzeuge sollten für uns funktionieren; nicht wir für sie.
quelle
Ich weiß, dass die Leute dagegen sind, aber ich habe eine super kurze Lösung dafür gefunden. Wenn Sie ein benutzerdefiniertes Attribut wie "meins" verwenden möchten, zum Beispiel:
Dann können Sie diesen Code ausführen, um ein Objekt zurückzugewinnen, genau wie es jquery.data () tut.
quelle
Spezifikation : Erstellen Sie ein ASP.NET TextBox-Steuerelement, das seinen Text gemäß den Eigenschaften "DecimalSeparator" und "ThousandsSeparator" mithilfe von JavaScript dynamisch automatisch als Zahl formatiert.
Eine Möglichkeit, diese Eigenschaften vom Steuerelement auf JavaScript zu übertragen, besteht darin, dass das Steuerelement benutzerdefinierte Eigenschaften rendert:
Benutzerdefinierte Eigenschaften sind über JavaScript leicht zugänglich. Während eine Seite, die Elemente mit benutzerdefinierten Eigenschaften verwendet, nicht überprüft wird , wird das Rendern dieser Seite nicht beeinflusst.
Ich nur diesen Ansatz verwenden , wenn ich einfache Typen wie Strings und Zahlen zu HTML - Elementen für die Verwendung mit JavaScript verknüpft werden soll. Wenn ich die Identifizierung von HTML-Elementen erleichtern möchte, verwende ich die Eigenschaften class und id .
quelle
Bei komplexen Web-Apps lege ich überall benutzerdefinierte Attribute ab.
Für öffentlich zugängliche Seiten verwende ich das Attribut "rel" und speichere alle meine Daten dort in JSON und dekodiere sie dann mit MooTools oder jQuery:
Ich versuche in letzter Zeit, mich an das HTML 5-Datenattribut zu halten, nur um mich "vorzubereiten", aber es ist noch nicht selbstverständlich.
quelle
Ich benutze die ganze Zeit benutzerdefinierte Felder, zum Beispiel <ai = "" .... Dann verweise ich mit jquery auf i. Ungültiges HTML, ja. Es funktioniert gut, ja.
quelle
Benutzerdefinierte Attribute sollten meiner bescheidenen Meinung nach nicht verwendet werden, da sie nicht validiert werden. Alternativ dazu können Sie viele Klassen für ein einzelnes Element definieren, z.
quelle
class
Attribut ist definitiv nicht nur für "Looks" reserviert. Eine andere Verwendung ist "Allzweckverarbeitung durch Benutzeragenten". Davon spricht die Spezifikation: w3.org/TR/REC-html40/struct/global.html#h-7.5.2