jQuery属性自动添加到元素

mac*_*ca1 13 jquery firebug ie-developer-tools

在第一次使用内置开发人员工具的IE8之后,我注意到jQuery将一个属性附加到我的一些元素上: alt text http://thebe.jtan.com/~vince/stack/jquery.PNG

我以前从未注意过这一点.事实上,这并没有出现在Firebug中...我现在只是第一次在IE8开发者工具中看到它.有谁知道jQuery使用它的原因,以及为什么它隐藏在firebug中?

gna*_*arf 14

jQuery源代码非常易于阅读,您可以查看data函数的功能.

总结一下:

  • jQuery有一个名为'expando'的变量 'jQuery'+(+new Date)
  • jQuery有另一个名为uuid"1"的变量
  • jQuery.cache 是一个空的对象
  • 在HTML元素/对象上设置/获取任何"数据"将使用expando对象上的属性来存储引用jQuery.cache- 有点像这样:

    // 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] = {});
    

  • 事件处理程序存储在此内部对象的eventshandle属性中data.

因此,在内部.data()使用HTML上的"expando"属性分配的所有属性都将密钥存储到jQuery的内部数据缓存中.jQuery事件处理程序也存储在同一个缓存中.分配给它的数值expando是一个递增计数器,它引用它在jQuery缓存对象中的位置.