jQuery中的Data是用来存储某dom节点所对应的数据,以及事件。
jQuery总共创建了两个Data实例,data_user和data_priv。其中data_user存储用户保存的一些数据,data_priv源码内部保存信息使用。
1、expando 可以看成是随机数,做对象属性使用。
2、uid 每个uid对应一个对象或者一个dom节点。
3、如果传入一个对象或者一个dom节点,先判断是否包含expando属性,如果没有就创建一个。
类似:
{ 'jQuery1212121212121': 1 }
4、使用$().data(),可以获取到设置在元素身上的data-属性,是通过源码3538行进行实现的。
源码
/**源码3538行**/
if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
attrs = elem.attributes;
for ( ; i < attrs.length; i++ ) {
name = attrs[ i ].name;
if ( name.indexOf( "data-" ) === 0 ) {
name = jQuery.camelCase( name.slice(5) );
dataAttr( elem, name, data[ name ] );
}
}
data_priv.set( elem, "hasDataAttrs", true );
}
Data这块实现比较简单,大家可以通过源码进行查看。源码3308行-源码3652行