Michael Kühnel
•
Macht Internet seit Netscape 4.7
•
Frontend Developer bei der SMA Solar Technology
AG
•
Twitter: @mkuehnel
•
Website: www.michael-kuehnel.de
Was ist Query .data()?
•
.data() und .removeData() – seit jQuery 1.2.3
•
hat nichts mit HTML5 zu tun
•
Key-Value-Speicher an DOM Elementen
Für was kann man das
gebrauchen?
Nutzereingaben zwischenspeichern, Status von
Elementen speichern, IDs aus Datenbanken … usw.
Was sind HTML5 data
Attribute?
Custom Attribute in HTML-Markup (data-*)
<ul>
<li data-foo="52">Element</li>
<li data-foo-bar="{ myType: 'test', count: 40 }">
Element
</li>
</ul>
Empfehlung: Hyphens wegen Namespacing (datamodulname-key).
Data Attribute und CSS Attribut
Selektoren
Nur lowercase und Bindestriche verwenden
#element[data-fooBar="25"] {
background-position: -16px 0;
}
💩
#element[data-foo-bar="25"],
#element[data-foobar="25"] {
background-position: -16px 0;
}
👍
jQuery 💖 HTML5 data-*
Data Attribute lesen
HTML-Markup:
<div id="element" data-foo-bar="25">Element</div>
JavaScript:
var data = $('#element').data('fooBar');
Siehe: http://api.jquery.com/data/#data-html5
Datentypen-Konvertierung
mit .data()
HTML-Markup:
<div id="element" data-foo-bar="25">Element</div>
JavaScript:
// 25 -> string
var data = $('#element').attr('data-foo-bar');
!
// 25 -> number
var data = $('#element').data('fooBar');
.data() »kennt« diese Datentypen:
•
booleans, strings, numbers, objects, arrays, null
Beachtenswert I
.data() liest den Value des HTML5 data Attributes nur
beim ersten Aufruf auf dem Element!
HTML-Markup:
<div id="element" data-foo-bar="25">Element</div>
JavaScript:
$('#element').data('fooBar'); // -> 25
$('#element').attr('data-foo-bar', '50');
$('#element').data('fooBar'); // -> 25
Lösung:!
Entweder mit .attr() lesen oder mit .data() setzen.
Beachtenswert II
Zu viel Magie?
HTML-Markup:
<div data-tweet-id="4238802317582131"></div>
<div data-tweet-id="423880231758213120"></div>
JavaScript:
$('div').each(function() {
console.log(typeof($(this).data('tweetId')));
});
// --> number
// --> string // WTF?!?
Grund: Der Maximalwert einer JavaScript Zahl ist 253
– also 9007199254740992