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] = {});
-
事件处理程序存储在
events
并handle
此内部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你会没事的。