Hi
jQuerys data() macht das meines Wissens so, dass es dem Element eine ID zuweist (sofern nicht der Browser mit uniqueID eine liefert) und dann in einem gekapselten Hash unter dieser ID die tatsächlichen Daten in einem weiteren Hash speichert.
Ein interessanter Hinweis. Mein IQ ist ziemlich am Anschlag, wenn es darum geht, fremden Code zu lesen. Aber so wie ich das verstanden habe, speichert auch jQuery ein so genanntes (oder einen so genannten?) "expando" im Element ab, worüber dann auf den Cache mit den Daten zugegriffen wird:
var expando = "jQuery" + now(), uuid = 0, windowData = {};
jQuery.extend({
cache: {},
data: function( elem, name, data ) {
elem = elem == window ? windowData : elem;
var id = elem[ expando ];
// Compute a unique ID for the element
if ( !id )
id = elem[ expando ] = ++uuid;
// Only generate the data cache if we're
// trying to access or manipulate it
if ( name && !jQuery.cache[ id ] )
jQuery.cache[ id ] = {};
// Prevent overriding the named cache with undefined values
if ( data !== undefined )
jQuery.cache[ id ][ name ] = data;
// Return the named cache data, or the ID for the element
return name ? jQuery.cache[ id ][ name ] : id;
},
//[...]
});
Ich habe es nach bozo20'2 Rat nun so gelöst:
//pseudo-code:
DOMElement.__mySpecialExpandoSettings = {};
DOMElement. __mySpecialExpandoSettings.<attributname1> = "value";
DOMElement. __mySpecialExpandoSettings.<attributname2> = 42;
Ich sehe nicht ein, was der Umweg über den Cache (in jQuery) bringt.