The jQuery source is pretty easy to read, and you can look at what the data
function is doing.
To summarize:
- jQuery has a variable called ‘expando’ which is
'jQuery'+(+new Date)
- jQuery has another variable called
uuid
which starts with “1” jQuery.cache
is an empty object-
Setting/Getting any “data” on a HTML Element/Object will use the
expando
property on the object to store a reference intojQuery.cache
— sort of like this:// get the elements cache id, or create a new cache id: var id = elem[expando] || (elem[expando] = uuid++); // get the cache for the element, or create it: var data = jQuery.cache[id] || (jQuery.cache[id] = {});
-
Event Handlers are stored in the
events
andhandle
properties of this internaldata
object.
So, internally all properties that are assigned using .data()
use this “expando” attribute on the HTML to store a key into jQuery’s internal data cache. jQuery event handlers are also stored in this same cache. The numeric value assigned to the expando
is an incrementing counter that references its location in the jQuery cache object.