Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery通过data()对象循环_Jquery_Loops_Each - Fatal编程技术网

jQuery通过data()对象循环

jQuery通过data()对象循环,jquery,loops,each,Jquery,Loops,Each,是否可以循环通过data()对象 假设这是我的代码: $('#mydiv').data('bar','lorem'); $('#mydiv').data('foo','ipsum'); $('#mydiv').data('cam','dolores'); 我该如何循环处理这个问题?each()可以用于此吗?我认为没有任何函数可以为您提供与data()函数一起添加的数据的所有“键”,但是,为什么不将所有数据放在对象/映射下的函数中呢 大概是这样的: var container = new

是否可以循环通过
data()
对象

假设这是我的代码:

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

我该如何循环处理这个问题?
each()
可以用于此吗?

我认为没有任何函数可以为您提供与
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);
}

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的建议,但这就是如何利用你现在拥有的

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

这将遍历“This”元素的数据对象中的每个属性。

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

我只是尝试了一下,但需要一些额外的数据值。如果你也遇到了这个“问题”,那么下面的方法应该可以奏效

$('#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 );
});
如果使用.data(),则表示它存储与匹配元素关联的任意数据,或在命名数据存储中返回匹配元素集中第一个元素的值

如果.data()在循环中,那么我们必须以循环中相同的方式访问它,例如(如下)


注意:在浏览器控制台中,如果它是一个内部变量,它将返回特定的

,这是否会在jquery的更高版本中发生更改(可能没有通知)?我肯定他们可以,但我不确定为什么会这样做。他们可能对数据功能进行的任何重组都可能包括内置的此功能。我不认为这是回避它的一个正当理由,但我想这是一个需要记住的问题。这对我来说不起作用,我不得不稍微修改它:
$.each($('#mydiv').data(),函数(I,e){alert(I+“:“+e);})
<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>
Monday
Tuesday
Wednesday
Thursday