2012-03-29 3 views
0

Ich möchte ein neues Element mit definierten HTML5-Datenattributen erstellen, sie werden jedoch nicht im DOM angezeigt (anders als bei Verwendung von .addClass). ist das beabsichtigte Verhalten?Erstellen neuer Elemente mit html5-Datenattribute definiert in DOM

dies schafft ein Element ohne die data-foo attributs:

-> $("<div>foo</div>").data('foo', 'bar').addClass('class') 
=> <div class="class">foo</div> 

ich hatte es im Konstruktor zu deklarieren

-> $("<div data-foo='bar'>foo</div>").addClass('class') 
=> <div class="class" data-foo="bar">foo</div> 

sollte nicht die .data Methode Arbeit das gleiche tun?

+0

iirc, '.data' nicht oder ändern nicht gesetzt Datenattribute, es ihnen gerade liest. –

Antwort

1

Von hier aus:

4. Keine jQuery-Daten-API ändert jemals HTML5-Datenattribute.

Die meisten Verwendungen von .data() und .removeData() sind immer noch für die ursprüngliche Zweck der Zuordnung von Daten mit DOM-Elementen im Speicher. Das Aktualisieren von DOM Attributen jedes Mal, wenn Daten geändert wurden, verlangsamte sich für keinen Grund. Es ist auch nicht möglich, alle Datentypen , die an ein DOM-Element angefügt werden können, wie Funktionen, Referenzen zu anderen DOM-Elementen oder benutzerdefinierte JavaScript-Objekte zu serialisieren.

Regel: Um HTML5-Daten - * - Attribute zu aktualisieren oder zu entfernen, verwenden Sie die Methoden .attr() oder .removeAttr() von jQuery.

So verwenden Sie die übliche attr ...

+0

Ziemlich sicher, dass dies nicht nur eine jQuery Sache ist. Wenn Sie 'element.data = [something]' angeben, werden diese Daten im Speicher verknüpft, aber nicht im DOM als Inline-Attribut dargestellt. Sie müssten 'element.setAttribute()' [anstelle von js .attr()] verwenden. – JKing

+0

ausgezeichnet ... ich wünschte, das war in der JQuery-Dokumentation. Vielen Dank! – brewster

+0

Cool, froh zu helfen! –