很多同學在專案中都喜歡將資料儲存在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物件提供快取
var
myobj = {};
$.data(myobj,
'name'
,
'jack'
);
$.data(myobj,
'name'
);
// jack
// 為htmlelement提供快取
內部實現上也是有區別的,
1,為js物件提供快取時,直接將資料儲存在js物件上。cache為js物件。此時會偷偷的給js物件新增個屬性(類似於jquery16101803968874529044),屬性值也是個js物件。舉例說明12
3var
myobj = {};
$.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.降低儲存資料的成本 通過屬性合...