jQuery是一個(gè)極為流行的JavaScript框架,它在日常的Web開(kāi)發(fā)中扮演了重要的角色。其中最常用的功能之一就是對(duì)于HTML文檔在客戶端的操作,其中就包括了對(duì)于數(shù)據(jù)的處理。
jQuery的data方法是用來(lái)在DOM元素上附加數(shù)據(jù)的方法,這些數(shù)據(jù)可以在JavaScript中被訪問(wèn)。當(dāng)一個(gè)DOM元素被選中后,可以使用data方法在它上面添加或獲取數(shù)據(jù)。
// 設(shè)置一個(gè)DOM元素的數(shù)據(jù)
$('div').data('foo', 'bar');
// 獲取一個(gè)DOM元素的數(shù)據(jù)
$('div').data('foo');
這個(gè)操作很簡(jiǎn)單,但是jquery中data方法的內(nèi)部實(shí)現(xiàn)其實(shí)非常值得深入研究。
jquery中的data方法不是直接在DOM元素上存儲(chǔ)數(shù)據(jù)的,而是在一個(gè)叫做jQuery.cache的全局對(duì)象中維護(hù)著所有的數(shù)據(jù)。在jQuery.cache對(duì)象中,每個(gè)DOM元素對(duì)應(yīng)著另外一個(gè)對(duì)象,這個(gè)對(duì)象中存儲(chǔ)了所有的數(shù)據(jù)。這個(gè)對(duì)象是通過(guò)jQuery:expando生成的唯一ID作為一個(gè)標(biāo)識(shí)的,這個(gè)ID存放在DOM元素的一個(gè)屬性上。
// 一個(gè)DOM元素的jQuery:expando ID
$('div').eq(1).data(jQuery.expando);
當(dāng)使用data方法為DOM元素添加數(shù)據(jù)時(shí),會(huì)先去檢查這個(gè)DOM元素上是否存在jQuery.cache中對(duì)應(yīng)的數(shù)據(jù)對(duì)象,如果沒(méi)有則創(chuàng)建它。
$('div').data('foo', 'bar');
通過(guò)這種方式,jQuery可以在DOM元素上維護(hù)一個(gè)統(tǒng)一的緩存,使得數(shù)據(jù)的添加和獲取可以方便地完成。這個(gè)緩存結(jié)構(gòu)的設(shè)計(jì)也保證了在jquery中數(shù)據(jù)的一致性和可靠性。