jQuery属性自动添加到元素

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

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

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

总结一下:

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

     //获取元素缓存ID,或创建新的缓存ID:
     var id = elem [expando] ||  (elem [expando] = uuid ++);
     //获取元素的缓存,或者创建它:
     var data = jQuery.cache [id] ||  (jQuery.cache [id] = {});
    

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

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

jQuery使用这个“expando”将数据和事件绑定到对象。 看起来它与数据和事件缓存一起工作。 不过,我很想听到更深入的解释。

我怀疑它隐藏在firebug中,因为我也看到了jquery数据对象。

我相信jQuery或你正在使用的任何插件只是在IE中添加了作为各种浏览器特定错误/缺点的修复/解决方法。

如果您使用jQuery的.html()方法来查找HTML字符串,请注意该HTML是否包含已注册事件的任何元素 – 您可能会获得比您讨价还价更多的内容。

不要依赖.html()来构建格式良好的XML代码段。

我的快速解决方法是改变业务的顺序。 在发送数据后,我只是简单地完成了jQuery事件绑定。 然而,鉴于我花掉头发所花费的时间,这是一个很难吸取的教训,但仍然是一个重要的时刻。

我猜您正在使用1.3.1,该问题已在以后的版本中得到修复。 所以,只需更新和probabaly你会没事的。