JQuery цикл через объект data () - PullRequest
25 голосов
/ 21 апреля 2009

Возможно ли зациклить объект data()?

Предположим, это мой код:

$('#mydiv').data('bar','lorem');  
$('#mydiv').data('foo','ipsum');  
$('#mydiv').data('cam','dolores');

Как мне пройти через это? Можно ли для этого использовать each()?

Ответы [ 6 ]

19 голосов
/ 02 июня 2010
$.each($.data(this), function(i, e) {
   alert('name='+ i + ' value=' +e);
});

Это будет повторять каждое свойство в объекте данных элемента this.

15 голосов
/ 21 апреля 2009

jQuery сохраняет всю информацию о данных во внутренней переменной jQuery.cache. С помощью этого простого, но полезного плагина можно получить все данные, связанные с конкретным объектом:

jQuery.fn.allData = function() {
    var intID = jQuery.data(this.get(0));
    return(jQuery.cache[intID]);
};

С этим на месте, вы можете сделать это:

$('#myelement').data('test1','yay1')
               .data('test2','yay2')
               .data('test3','yay3');

$.each($('#myelement').allData(), function(key, value) {
    alert(key + "=" + value);
});

Вы можете просто воспользоваться предложением Мэтта Б, но это то, как это сделать с тем, что у вас есть сейчас.

10 голосов
/ 24 июня 2010

Протестировано с jQuery 1.4 и советами от @ user292614 работает:

$('#mydiv').data('bar','lorem');  
$('#mydiv').data('foo','ipsum');  
$('#mydiv').data('cam','dolores');

$.each( $('#mydiv').data(),function(i, e) {
   alert('name='+ i + ' value=' +e);
});
9 голосов
/ 21 апреля 2009

Я не думаю, что есть какая-либо функция, которая дает вам все «ключи» данных, которые были добавлены с помощью функции data(), но вместо этого, почему бы не поместить все ваши данные в функцию в объект / карта?

как то так:

var container = new Object();
container.bar = "lorem";
container.foo = "ipsum";
container.cam = "dolores";
$("mydiv").data("container", container);

и затем, когда вы хотите прочитать данные / перебрать их:

var blah = $("mydiv").data("container");
for(key in blah) {
    var value = blah[key];
    //do whatever you want with the data, such as:
    console.log("The value of ", key, " is ", value);
}
0 голосов
/ 10 апреля 2017

Если мы используем .data (), значит, он хранит произвольные данные, связанные с сопоставленными элементами, или возвращает значение в именованном хранилище данных для первого элемента в наборе сопоставленных элементов.

и если .data () в цикле, поэтому мы должны обращаться к нему таким же образом в цикле, например, для (ниже)

<p class="weekday" data-today="monday">Monday</p>
<p class="weekday" data-today="tuesday">Tuesday</p>
<p class="weekday" data-today="wednesday">Wednesday</p>
<p class="weekday" data-today="thursday">Thursday</p>

HTML в моем цикле и data-today одинаковы во всех тегах, но их значения различны, поэтому в основном это цикл, сгенерированный html, поэтому мы должны получить доступ таким же образом, то есть цикл в js/jQuery, например, (below jQuery code)

$('.weekday').each(function(){ $(this).data('today'); });

OutPut :

Monday
Tuesday
Wednesday
Thursday

ПРИМЕЧАНИЕ: в консоли браузера возвращается конкретный <DIV>.

0 голосов
/ 16 ноября 2010

Я только что попробовал это, но мне нужны были дополнительные значения данных. Если у вас также есть эта «проблема», то должно работать следующее.

$('#mydiv').data('bar', {name:'lorem', id:'156', price:'199'}); 

тогда вы можете просто расширить значение id

$.each( $('#mydiv').data(),function(i, e) {
   alert('name='+ i + ' name=' +e.name + ' id='e.id + ' price=' + e.price );
});
...