2014-01-07 31 views
1

jQuery 1.x元素在需要时会收到一个唯一标识符(缓存键),存储在节点的ele[jQuery.expando]属性set by this line of code中。 Mootools uses similar logicjQuery 2.x如何唯一标识元素(在.data()中)

所以在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回购中引用一个行号会很好!

回答

1

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

+0

你能不能给我任何属性名的例子或他们定义的呢? – megawac

+0

它在repo中的'data/Data.js'中定义,并且如果使用jquery数据检查dom节点的javascript表示形式,则它的属性看起来像'jquery1426525252650.115245662563'(构造函数是' jQuery.expando + Math.random()' – Entoarox

+0

对不起,没有看到他们在https://github.com/jquery/jquery/blob/master/src/data/Data.js中的元素上定义了uid的位置你请链接 – megawac