2010-11-11 5 views
0

Я использую функцию .data() jquery для кеширования ряда значений объекта document.body. Такое кэширование выполняется динамически с помощью функции .each():jquery - получение значений .data(), чья метка содержит заданную строку

$('foo').each(function(){ 
var bar = $('foo').attr('id'); 
var myVal = $('foo').val(); 
$.data(document.body, 'docDepth-' + bar, myVal);  
}); 

Позже я хочу, чтобы получить этот набор пар данных. Моя проблема заключается в том, что я не знаю, как их получить, поскольку (а) я не знаю, сколько пар данных будет прикреплено к document.body, и (б) я не знаю, что все возможное метки будут для пар данных.

Что мне нужно сделать, это просмотреть хранимые пары данных на document.body, найти те, чей ярлык содержит строку «docDepth», а затем вернуть их как массив. Как я могу это сделать?

ответ

0

Вы можете получить все данные, хранящиеся на элементе с помощью var d = $('element').data();

Он будет возвращать весь объект данных, которые затем можно перебирать, чтобы найти пары ключ-значение, что вам нужно.

for (var i in d) 
{ 
    var v = d[i]; 
    console.log('key:', i, 'value:', v); 
} 

http://api.jquery.com/data/

+0

Великого. Только то, что мне было нужно. Благодаря! – monotasker

+0

ОК, мне все еще трудно понять, как фильтровать содержимое d и выбирать только пары значений ключа, чей ключ содержит строку. – monotasker

0

Если вы только кэширование вы можете сделать это гораздо дешевле, используя свой собственный объект непосредственно, как это:

var cache = {}; 
$('foo').each(function(){ 
    cache[this.id] = $(this).val(); 
}); 

Поскольку мы находимся в объекте только для этого , нет необходимости в накладных префиксах. Тогда перебрать их позже использовать for..in петлю для $.each(), как это:

$.each(cache, function(key, value) { 
    //use key, value here 
});