2009-08-20 13 views
41

mögliche Dubletten:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?Ist es in Ordnung, HTML-Elementen eigene Attribute hinzuzufügen?

Im aktuellen Lern ​​Projekt arbeite ich an, ich brauche ein Attribut, dessen Wert wird eine Zahl hinzuzufügen. Zuerst dachte ich daran, "ID" für diesen Zweck zu verwenden, aber an answer ergab, dass es nicht gut ist, das zu tun.

Ist es in Ordnung, wenn ich mein eigenes Attribut erstelle, "messid" sage und ihm einen numerischen Wert wie "12", "6" usw. zuweise?

Hier ist, warum ich das tun möchte, damit Sie mich korrigieren können, wenn ich es total falsch mache: Ich muss auf diese Nummer in meinem JavaScript zugreifen (mit jQuery). Einfach den Wert des Attributs zu nehmen ist einfach, aber das Extrahieren des numerischen Wertes aus einer Zeichenkette wie "m12" oder "m6" ist ein Schmerz. (Ich bin ein Anfänger in der Welt der JavaScript.)

Antwort

90

Es gab viele Diskussionen darüber gewesen:

Am Ende des Tages, ich auf dem Lager bin, die Datenattribute glaubt, sind der beste Weg zu gehen. Sie werden in HTML5 eingeführt, um Namenskonflikte zu vermeiden. Im Wesentlichen im Zusammenhang Sie „Daten-“ auf dem Attributnamen nur Zierer, wenn Sie etwas Daten speichern wollen:

<div class="user" data-userid="5"></div> 

Der einzige Nachteil an der ganzen Sache ist dann, dass Ihr XHTML nicht bestätigen, aber ich ehrlich don kümmere mich nicht um das Zeug. (Das ist richtig, ich habe es gesagt)

+9

+1. Ich stimme völlig zu, dass dieser Ansatz eine funktionierende Lösung ist, die einfach zu implementieren ist und nichts kaputt macht. Der Pragmatismus über den Idealismus gewinnt auch in meinem Buch. – AnthonyWJones

+1

Ich würde damit gehen, da es heute funktioniert und da es in den HTML5-Spezifikationen ist, wird es wahrscheinlich in 10 Jahren funktionieren. Außerdem werden die Daten unabhängig von anderen Werten gehalten (z. B. indem sie im ID-Attribut beibehalten werden, das sich später aus anderen Gründen ändern muss), während sie weiterhin auf dem Element verbleiben. Und ja, HTML Validierungsfehler sollten als Empfehlungen/Hinweise auf Probleme gesehen werden, nicht als Fehler, die man beheben muss (und während ich auf diesem Weg war, würde ich dasselbe für JSLint sagen, nur um die Dinge ein bisschen aufzurüsten =) – Blixt

+6

"Das stimmt, Ich sagte es "- der erste Schritt ist es zuzugeben. ;) – nickf

-8

No - it's not.

+0

Haters - was habe ich falsch gesagt? Ist es in Ordnung, wenn die Website die W3-Validierung nicht besteht? –

+1

Ich habe diese * nur weil * Ich fühle es ist eine echte Antwort; obwohl ich vermuten würde, dass die Herabstufungen auf einen Mangel an Erklärung zurückzuführen sind. Und nein, ich denke nicht, dass es nur ausreicht, einen Link zu liefern. Ich glaube, dass Sie die Seite, auf die Sie verlinken, zumindest zusammenfassen sollten, auch wenn Sie sich selbst nicht erklären wollen. –

+1

@Arnis: Mag sein, vielleicht nicht, aber wie schwer wäre es für dich gewesen, diese kleine Menge Text in deine "Antwort" aufzunehmen? – AnthonyWJones

8

In HTML 5 können Sie jedes Attribut beginnend mit data-, so z. <div data-messid="12"> ist in Ordnung.

HTML 4 und XHTML 1 werden nicht validiert, wenn Sie Ihr eigenes Attribut hinzufügen, aber nichts Schlimmes passiert, wenn Sie den Attributnamen eindeutig genug auswählen (damit kein Konflikt mit einem aktuellen oder zukünftigen HTML-Attribut entsteht).

2

Ich benutze benutzerdefinierte Attribute, und da sie von allen Browsern unterstützt werden, die ich überprüft habe, denke ich, dass es nicht schlecht ist, sie zu verwenden. Sie können auch benutzerdefinierte HTML-Tags verwenden, um HTML5 mit einigen IE-Hacks zu simulieren, also warum nicht Attribute verwenden, wenn sie keine Hacks benötigen?

Wie auch immer, Sie ähnliche Diskussion hier lesen: Custom attributes - Yea or nay?

1

Dies ist keine definitive Antwort, aber das kann ich nicht nur gut funktioniert, sage in der Vergangenheit tun gehabt zu haben, ist es Cross-Browser freundlich.

5

Nur damit Sie wissen, können Sie einfach eine ID aus einem String wie m12 oder m6 extrahieren, würde ich es tun, wie folgt:

//name the IDs m_12, m_3 etc 
var number = $('#someElement').attr('id').split('_')[1]; 

Oder wenn sagen wir, Sie haben eine Reihe von Links mit Zahlen in wie oben die ID, und alle Verbindungen haben die clickMe Klasse:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

Das ist, wie ich normalerweise etwas mache, wenn ich einfach eine ID habe, die ich abrufen möchte, aber manchmal gibt es mehr als das. –

+0

Ich wünschte, ich kann nur einmal upvote :) – codelame

1

Wenn jQuery verwenden Sie .data verwenden können benutzerdefinierte Informationen gegen ein Element zu speichern.

Der Nachteil benutzerdefinierte Attribute sind:

  • IE6 zusätzliche Objekte erstellt benutzerdefinierte speichern ‚EXPANDO‘ Attribute diese haben eine Tendenz, vor allem lecken, wenn sie über ein Skript erstellt werden.

  • Validierung gibt

+0

Ich benutze ASP.NET MVC und ich versuche, benutzerdefinierte Attribut "Daten-messid" mit htmlAttribs Parameter der HTML-Hilfsmethoden hinzufügen: new {@class = "Mcf", Data-dd = Html.AttributeEncode (m.ID)}. Aber es funktioniert nicht (Syntaxproblem). Ich sehe, Sie sind aktiv in ASP.NET MVC-Tag, also können Sie mir bitte helfen, wie es geht? – Hemant

+0

Sicher - fragen Sie eine andere Q mit einem asp.net MVC-Tag – redsquare

+0

obwohl, was Sie haben, sieht richtig aus – redsquare

Verwandte Themen