所以我使用这个代码来:
$('.something').on('click', function () {
console.log($(this).data('id'));
}
出于某种原因,如果我使用检查器修改数据 ID,jQuery 仍然会看到一开始就存在的 ID。但是,我使用 JS 尝试了同样的事情,它确实看到了变化。这让我想知道 jQuery 是否以某种方式缓存了选择的元素并使用它们而不是实际的 DOM。
有人可以解释一下会发生什么以及jQuery如何在后台进行事件绑定吗?
稍后编辑:我想指定我在谈论我放在 HTML 中的“数据-”属性,而不是 jQuery 提供的“.data()”。不知道是不是一样的。
jQuery 缓存选定的元素?
不是。但是管理的数据data
存储在由 jQuery 维护的对象缓存中,由 jQuery 添加到元素的唯一标识符作为键(因此它可以查找数据)。data
只有初始化的data-*
属性,这是不是对他们的访问。它比这更多和更少。
如果您有兴趣,您可以将其视为元素实例上的“expando”属性,它将以“jquery”开头并附加一个很长的数字(目前;它是未记录的——有充分的理由 ——所以这可能改变):
var foo = $("#foo");
console.log(foo.data("info")); // hi there
console.log("Expando name: " + Object.getOwnPropertyNames(foo[0]).find(name => name.startsWith("jQuery")));
<div id="foo" data-info="hi there"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句