讀jQuery之六(快取資料)

2022-07-30 09:51:11 字數 3795 閱讀 2550

很多同學在專案中都喜歡將資料儲存在htmlelement屬性上,如12

34test

給頁面中div新增了自定義屬性「data」及值「some data」。後續js**中使用getattribute獲取。

jquery從1.2.3開始提供了data/removedata方法用來儲存/刪除資料。1.6.1**片段12

3456

jquery.extend(,

// please use with caution

uuid: 0,

...

});

即給jquery新增了靜態字段/方法,有jquery.cache/jquery.uuid/jquery.expando等。下面分別介紹

jquery.cache空物件,用來快取。它的結構較複雜。

jquery.uuid自增唯一的數字。

jquery.expando字串,使用math.random生成,去掉了非數字字元。它作為htmlelement或js物件的屬性名。

1expando:"jquery"+ ( jquery.fn.jquery + math.random() ).replace( /\d/g,""),

jquery.hasdata用來判斷htmlelement或js物件是否具有資料。返回true或false。即如果呼叫了jquery.data方法新增了屬性,則返回true。12

3456

7aa

jquery.acceptdata用來判斷該元素是否能接受資料,返回true或false。在jquery.data中使用。

jquery.data這是提供給客戶端程式員使用的方法,它同時是setter/getter。

傳乙個引數,返回附加在指定元素的所有資料,即thiscachejquery.data(el); // thiscache

傳二個引數,返回指定的屬性值jquery.data(el, 'name'); 

傳三個引數,設定屬性及屬性值jquery.data(el, 'name', 'jack');jquery.data(el, 'uu', {});

傳四個引數,第四個引數pvt僅提供給jquery庫自身使用。即jquery._data方法中傳true。因為jquery的事件模組嚴重依賴於jquery.data,為避免人為的不小心重寫在這個版本中加入的

jquery.removedata刪除資料。

上面是jquery資料快取模組的整體概述,下面詳細說下jquery.data方法。jquery.data為兩種物件提供快取:js物件和htmlelement12

3456

78910

1112

// 為js物件提供快取

varmyobj = {};

$.data(myobj,'name','jack');

$.data(myobj,'name');// jack

// 為htmlelement提供快取

內部實現上也是有區別的,

1,為js物件提供快取時,直接將資料儲存在js物件上。cache為js物件。此時會偷偷的給js物件新增個屬性(類似於jquery16101803968874529044),屬性值也是個js物件。舉例說明12

3varmyobj = {};

$.data(myobj,'name','jack');

console.log(myobj);

myobj的結構如下12

345myobj =

}

「jquery16101803968874529044」這個字串在data內部命名為id(注意並非htmlelement元素的id),它實際就是jquery.expando。上面已經提到它是在jquery.js引入到頁面後隨機生成的。

2,為htmlelement提供快取時,卻不會直接儲存在htmlelement上。而是儲存在jquery.cache上。cache為jquery.cache。此時先給htmlelement新增屬性(類似於jquery16101803968874529044),屬性值為數字(1,2,3遞增)。即只將一些數字儲存在了htmlelement上,不會直接將資料置入。這是因為ie老版本中可能會存在記憶體洩露危險。而htmlelement如何與jquery.cache建立聯絡呢? 還是id。剛剛提到屬性值數字就是id。舉例說明12

3456

7

el 上新增了屬性jquery.expando,值為id,這個id是從1開始遞增的。而id又作為jquery.cache的屬性(key)。這樣就htmlelement就與jquery.cache建立了聯絡。如圖

不知注意到沒有,jquery.data還有第四個引數pvt,這個引數只在jquery._data中使用。12

34// for internal use only.

_data:function( elem, name, data ) ,

jquery._data從命名上就指定它是私有的,使用jquery的客戶端程式員不應該去呼叫該方法。jquery的api文件上也不會公開它。

jquery的資料快取模組從1.2.3到1.6.1幾乎每個版本都在變。jquery._data的提出就是為了避免客戶端程式員覆蓋/重寫了默寫模組。如jquery事件模組中事件handler等就使用jquery.data儲存,如果重寫了該模組。那麼事件模組將癱瘓。因此特意新增了pvt引數及jquery._data方法。

但如果你刻意要破壞,那麼還是可以做的。如下12

3456

78910

test

點選div[id=xx]將不會觸發點選事件。

整個jquery.data設定(set)資料快取的過程就是如此,理解的這個。取資料(get)的過程就好理解了。不重複。

最後,我會給zchian.js新增zchain.data/removedata方法,因為是「迷你版」,僅給htmlelement新增資料快取。請注意。

相關:

MyBatis之六 快取

所有的這些屬性都可以通過快取元素的屬性來修改。比如 這個更高階的配置建立了乙個fifo快取,並每隔60秒重新整理,存數結果物件或列表的512個引用,而且返回的物件被認為是唯讀的,因此在不同執行緒中的呼叫者之間修改它們會導致衝突。可用的收回策略有 1 lru 最近最少使用的 移除最長時間不被使用的物件...

jQuery資料快取 data name

data name 返回元素上儲存的相應名字的資料,可以用data name,value 來設定。如果jquery集合指向多個元素,那將只返回第乙個元素對應的資料。這個函式可以用於在乙個元素上訪問資料而避免了迴圈引用的風險。jquery.data是1.2.3的新版功能。你可以在很多地方使用這個函式,...

讀《python資料探勘與分析實戰》之六

在大資料集上進行複雜的資料分析和挖掘需要很長的時間,資料規約產生更小但保持原資料完整性的新資料集。在規約後的資料集上進行分析和挖掘將更有效率 資料規約的意義 1.降低無效,錯誤資料對建模的影響,提高建模的準確性。2.少量且具代表性的資料將大幅縮減資料探勘所需的時間,3.降低儲存資料的成本 通過屬性合...