gpt4 book ai didi

asp.net - 为什么 IE 为具有鼠标悬停处理程序的服务器端元素添加 jQuery 属性?

转载 作者:行者123 更新时间:2023-12-01 03:54:43 25 4
gpt4 key购买 nike

这对我来说不是一个重要的知识,但我仍然想知道这里到底发生了什么。

这是一个 .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->Source,这些东西就不会出现,就像在 FF Page Source 或 FireBug 中一样。

编辑:我刚刚在另一个页面上运行了该启动脚本,该页面有大量的 JavaScript 处理程序,全部由 jQuery 分配。每个具有处理程序的元素上都存在此属性。

最佳答案

它是 jQuery Expando 属性,它是 jQuery.cache 对象中表示该元素的数据和事件集合的键。

在您的示例中,在该页面 jQuery.cache["2"] 将为您提供与 $("#ctl00_CloseButton").data() 相同的结果,当您添加事件处理程序或数据而对象没有事件处理程序或数据时,它会获得一个新的 Expando (jQuery.expando) 属性,其中包含序列中的下一个数字作为值。

这样做的原因主要是针对 IE,将处理程序或数据对象直接分配给元素会使垃圾收集器的行为非常糟糕,用此键附加它们,但没有直接引用链接,没有循环,垃圾收集器的行为好多了。

关于asp.net - 为什么 IE 为具有鼠标悬停处理程序的服务器端元素添加 jQuery 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com