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

时间:2014-01-07 18:42:20

标签: javascript jquery dom

jQuery 1.x元素中,在需要时会收到唯一标识符(缓存键),存储在节点的ele[jQuery.expando]属性set by this line of code中。 Mootools 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 repo中引用行号非常好!

1 个答案:

答案 0 :(得分:1)

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

它的第42行和第43行将唯一的数据属性添加到元素中,Data.js文件实际上是一个(大多数)独立的类定义,jQuery用它来处理数据存储功能。我承认代码在repo中相当复杂,但是使用它作为一种学习jQuery如何工作的方式并不是真的值得推荐,使用code.jquery.com/jquery-2.0.3.js上的注释源代替它,它可以理解一切如何交互更容易。

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