13

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

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

4

4 回答 4

14

jQuery 源代码很容易阅读,您可以查看data函数的作用。

总结一下:

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

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

  • 事件处理程序存储在此内部对象的events和属性中。handledata

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

于 2010-05-03T20:18:00.080 回答
4

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

于 2010-05-03T20:02:07.510 回答
0

如果您使用 jQuery 的 .html() 方法查找 HTML 字符串,请注意该 HTML 是否包含任何已注册事件的元素——您可能会得到比您预期的多一点。

不要依赖 .html() 来获取格式良好的 XML 片段。

我的快速解决方法是改变业务顺序。在发送数据后,我只是简单地进行了 jQuery 事件绑定。因此,鉴于我花了很多时间扯头发,这是一个惨痛的教训,但仍然很重要。

我猜您使用的是 1.3.1,该问题已在更高版本中得到修复。所以只要更新,你可能会没事的。

于 2010-05-03T20:06:00.247 回答
0

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

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

于 2010-05-03T19:46:48.550 回答