这对我来说不是一个至关重要的知识,但我仍然想知道这里到底发生了什么。
这是一个.NET 3.5 Web窗体应用程序。其中一个页面有3个服务器端输入,类型为“提交”。这些输入中的每一个都使用jQuery为它们分配了以下JavaScript处理程序:
$('.button').mouseover(function() {
$(this).addClass('hoverEffect');
});
$('.button').mouseout(function() {
$(this).removeClass('hoverEffect');
});
当我运行以下脚本时(是的,这是IE特定的)
$(document).ready(function() {
d = window.open();
d.document.open('text/plain').write(document.documentElement.outerHTML);
});
在页面上的,我得到以下按钮标记:
<INPUT class=button id=ctl00_CloseButton onclick=window.close(); type=submit
value=Close name=ctl00$CloseButton jQuery1287434381268="2">
问题是,这个 jQuery1287434381268 =“2”究竟是什么?
这些值从2到4.因此,第一个按钮是2,第二个是3,第三个是4.每次重新加载页面时,1287434381268编号都不同。我知道它与2个JavaScript处理程序有关,因为如果我删除它们,属性就不再存在了。这是IE处理jQuery分配处理程序的方式吗?如果我在IE中执行简单的View-&gt; Source,那么这个东西就不会出现,因为它不会出现在FF Page Source或FireBug中。
编辑:我刚刚在另一个页面上运行了该启动脚本,该页面上有大量的JavaScript处理程序都使用jQuery进行了分配。此属性出现在具有处理程序的每个元素上。
答案 0 :(得分:3)
这是jQuery expando属性,它是jQuery.cache
对象中表示该元素的数据和事件集合的关键。
在您的示例中,当您添加事件处理程序或数据且该对象已时,该页面jQuery.cache["2"]
将为您提供与$("#ctl00_CloseButton").data()
相同的内容一,它获得一个新的expando(jQuery.expando
)属性,序列中的下一个数字作为值。
这样做的原因主要是IE,将处理程序或数据对象直接分配给元素使得垃圾收集器表现得很差,用这个键附加它们,但是没有直接的引用链接,没有循环和垃圾收集器的行为好多了。