javascript - jQuery 2.x 如何唯一标识一个元素(在 .data() 中)

标签 javascript jquery dom

在 jQuery 1.x 中,元素将在需要时接收唯一标识符(缓存键),存储在节点的 ele[jQuery.expando] 属性中, set by this line of codeMootools uses similar logic .

所以在 jQuery 1.x

var test = document.createElement("span");
console.log(test[jQuery.expando]);//undefined
$(test).data("test", {stuff:2});
console.log(test[jQuery.expando]);//some uid

我很好奇,因为我正在实现类似的逻辑,jQuery 如何识别 2.x 中的节点。引用 github 存储库中的行号会很棒!

最佳答案

jQuery 2 仍然使用此方法,该属性更难检测,因为它使用隐藏的随机数作为属性名称的一部分,而不仅仅是 jQuery.expando

第 42 和 43 行向元素添加了唯一的数据属性,Data.js 文件实际上是一个(大部分)独立的类定义,jQuery 使用它来处理数据存储功能。我承认代码库中的代码相当复杂,但是并不建议使用它作为学习 jQuery 如何工作的方式,请使用 code.jquery.com/jquery-2.0.3.js 上的注释源。相反,这样做可以让理解一切如何相互作用变得更加容易。

参见https://github.com/jquery/jquery/blob/6318ae6ab90d4b450dfadf32ab95fe52ed6331cb/src/data/Data.js#L32-51

关于javascript - jQuery 2.x 如何唯一标识一个元素(在 .data() 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979302/

相关文章:

javascript - 从 DOM 元素引用 Javascript 对象是一种不好的做法吗?

javascript - <body> 最右侧的特殊行为

javascript - 在循环中替换数组的变量

javascript - 无法将 json 值访问到 ejs 模板中

javascript - 使 svg 元素位于顶部

jquery - 根据视口(viewport)宽度加载 jQuery

javascript - 基于层级节点树构建数组

javascript - 使用 ng-class 显示隐藏元素的 Angular 指令

javascript - 使用 javascript 更改 MaskedEditExtender 的掩码值

javascript - 使用 JQuery 获取 primefaces 输入文本值