jQuery循环遍历data()对象

bar*_*art 25 each jquery loops

是否可以循环一个data()对象?

假设这是我的代码:

$('#mydiv').data('bar','lorem');  
$('#mydiv').data('foo','ipsum');  
$('#mydiv').data('cam','dolores');
Run Code Online (Sandbox Code Playgroud)

我该如何循环呢?可以each()用于此吗?

Joh*_*ler 19

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

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


Pao*_*ino 15

jQuery将所有数据信息存储在jQuery.cache内部变量中.使用这个简单但有用的插件可以获取与特定对象关联的所有数据:

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

有了这个,你可以这样做:

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

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

您可以使用matt b的建议,但这是如何使用您现在所拥有的.


Mik*_*son 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);
});
Run Code Online (Sandbox Code Playgroud)


mat*_*t b 9

我不认为有任何函数可以为您提供随data()函数添加的数据的所有"键" ,而是为什么不将所有数据放入对象/映射下的函数中?

这样的事情:

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

然后当你想读取数据/迭代它时:

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);
}
Run Code Online (Sandbox Code Playgroud)