jquery - получение значений.data(), метка которых содержит данную строку

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

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

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

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

2 ответа

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

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

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

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

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

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

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

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

Другие вопросы по тегам