jQuery循环遍历data()对象

时间:2009-04-21 13:32:55

标签: jquery loops each

是否可以遍历data()对象?

假设这是我的代码:

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

如何循环使用? each()可以用于此吗?

6 个答案:

答案 0 :(得分:19)

$.each($.data(this), function(i, e) {
   alert('name='+ i + ' value=' +e);
});

这将迭代'this'元素的数据对象中的每个属性。

答案 1 :(得分:15)

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 :(得分:10)

使用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);
});

答案 3 :(得分:9)

我认为没有任何函数可以为您提供已添加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 :(得分:0)

我刚试过这个但需要一些额外的数据值。如果你也遇到了这个“问题”,那么以下内容应该有效。

$('#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 );
});

答案 5 :(得分:0)

如果我们使用.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所以我们必须以相同的方式访问,即{{1}中的循环例如js/jQuery

(below jQuery code)

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

OutPut :

注意:在浏览器控制台中,它会返回特定的Monday Tuesday Wednesday Thursday