Цикл jQuery через объект data()
Возможно ли выполнить цикл через объект data()
?
Предположим, что это мой код:
$('#mydiv').data('bar','lorem');
$('#mydiv').data('foo','ipsum');
$('#mydiv').data('cam','dolores');
Как мне пройти через это? Можно ли использовать each()
для этого?
Ответы
Ответ 1
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);
});
Вы могли бы просто использовать предложение matt b, но это как сделать это с тем, что у вас есть прямо сейчас.
Ответ 2
$.each($.data(this), function(i, e) {
alert('name='+ i + ' value=' +e);
});
Это приведет к повторению каждого свойства в объекте данных элемента 'this'.
Ответ 3
Я не думаю, что есть какая-либо функция, которая дает вам все "ключи" данных, которые были добавлены с помощью функции 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);
}
Ответ 4
Протестировано с помощью 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);
});
Ответ 5
Я просто попробовал это, но мне нужны дополнительные данные. Если у вас также есть эта "проблема", тогда должно работать следующее.
$('#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 );
});
Ответ 6
Если мы используем .data(), он сохраняет произвольные данные, связанные с согласованными элементами, или возвращает значение в названном хранилище данных для первого элемента в наборе согласованных элементов.
и if.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>
.