1
Dom元素似乎是附加與該元素相關的數據的理想場所,但訪問它時代碼繁瑣,而且可能效率低下。在jQuery中增加/減少.data()
目前,我做這樣的事情來增加:
$('#the-thing').data({ counter: $('#the-thing').data('counter') + 1 })
有遞增存儲在一個jQuery對象的.data()一些更快的方法?
Dom元素似乎是附加與該元素相關的數據的理想場所,但訪問它時代碼繁瑣,而且可能效率低下。在jQuery中增加/減少.data()
目前,我做這樣的事情來增加:
$('#the-thing').data({ counter: $('#the-thing').data('counter') + 1 })
有遞增存儲在一個jQuery對象的.data()一些更快的方法?
更好:
var data = $('#the-thing').data();
data.counter += 1;
// `$('#the-thing').data().counter += 1` should work too
這避免調用數據的方法兩次。 documentation也說:
使用該對象直接獲取或設置值比單獨調用.data()來獲取或設置每個值更快。
您可以創建一個功能,如果你真的想:
function add(sel, prop, val) {
var data = $(sel).data();
data[prop] += val;
}
由於@Zirak所指出的,如果你把這個規律電話,一個插件可能是最好的選擇:
(function($) {
$.fn.inc = function(prop, val) {
return this.each(function() {
var data = $(this).data();
if(!(prop in data)) {
data[prop] = 0;
}
data[prop] += val;
});
}
}(jQuery))
可用於:
$('#the-thing').inc('counter', 1);
$('#the-thing').inc('counter', -1);
我知道inc
是不是一個好方法名稱,因爲它意味着你只能增加值。但我想不到更好的東西....我願意提出建議:)
作爲一個不值得注意的,做一個jQuery插件會更好,我認爲,所以你可以鏈接和使用它與您的已經選定的元素。當然,只有當你想多次使用它,並且對它感覺舒適。 – Zirak 2011-04-13 23:05:23
@Zirak:好主意......更新我的答案。 – 2011-04-13 23:08:32
jsfiddle.net/cwolves/DYWkh/4/ - 我正在覆蓋.data(),但這可能很容易被命名爲別的東西 – 2011-04-13 23:25:39