Jquery 从div构建相关数据数组

Jquery 从div构建相关数据数组,jquery,arrays,loops,each,Jquery,Arrays,Loops,Each,我需要遍历div及其子对象,并获取要在数组中访问的数据值。我可以通过索引和每个循环子项来正确地记录所有信息,但我无法将其正确地放入数组中,在数组中每个块都被索引,然后另一个每个循环获取该块中的子项并从每个.internal div中提取数据属性 目前,我确实获得了所有.block div作为数组的索引,但在每个数组中,而不是在3组数据属性中(即第一个.block有三个.inner div),它只拉入最后一组-例如7,56,而我需要它拉入1,43 3,34 7,56 这是我的html <di

我需要遍历div及其子对象,并获取要在数组中访问的数据值。我可以通过索引和每个循环子项来正确地记录所有信息,但我无法将其正确地放入数组中,在数组中每个块都被索引,然后另一个每个循环获取该块中的子项并从每个.internal div中提取数据属性

目前,我确实获得了所有.block div作为数组的索引,但在每个数组中,而不是在3组数据属性中(即第一个.block有三个.inner div),它只拉入最后一组-例如7,56,而我需要它拉入1,43 3,34 7,56

这是我的html

<div id="wrapper">
    <div class="block">
        <div class="inner" data-a='1' data-b="43"></div>
        <div class="inner" data-a="3" data-b="34"></div>
        <div class="inner" data-a="7" data-b="56"></div>
    </div>
    <div class="block">
        <div class="inner" data-a='3' data-b="76"></div>
        <div class="inner" data-a="9" data-b="67"></div>
    </div>
    <div class="block">
        <div class="inner" data-a='5' data-b="33"></div>
        <div class="inner" data-a="4" data-b="22"></div>
    </div>
</div>

您可以构建一个索引号数组。
只用


每个
方法中。

我认为问题出在

blockNo[index] = [cell.data('a'),cell.data('b')];
您正在执行的div.block子元素的每次迭代blockNo[index],它会不断替换旧值,因此您只能得到第三个集合

这应该行得通

frame  = $('.block');
blockNo = [];

frame.each(function( index ) {

 $(this).children().each(function() {
    cell = $(this);
    blockNo.push([cell.data('a'),cell.data('b')])
 });      
});
您必须分别构建每个“行”元素:

var frame = $('.block');
var blockNo = [];

frame.each(function( index ) {
    // a new array ("row") for each .block element
    var row = [];

    // fill it up with values
    $(this).children().each(function() {
        row.push([this.getAttribute("data-a"), this.getAttribute("data-b")]);
    });

    // add it to blockNo
    blockNo.push(row);
});
我还创建了
frame
blockNo
局部变量(这几乎是人们一直想要的),并将对
.data
的调用替换为直接DOM
getAttribute
。如果您一般不打算使用
.data
访问此信息,那么完全不使用jQuery的数据存储设施会更有效。

使用
.map()
.get()


我认为您的
索引
变量可能会混淆,因此您将始终覆盖0和1。我建议您使用2D数组或JSON来存储数据,而不是当前数组。我在children循环中尝试了这一方法,得到的结果略有不同,仍然只返回一个childs数据属性,但与最后一个(7,56)不同它返回了第一个(1,43)辉煌的这是它做到的!我知道我要做什么我只是不太明白谢谢你这么快的回复Jon非常感谢上面的建议整理好了但是谢谢你的回复在我开始玩之前我看了.map()和.get()。谢谢
blockNo[index] = [cell.data('a'),cell.data('b')];
frame  = $('.block');
blockNo = [];

frame.each(function( index ) {

 $(this).children().each(function() {
    cell = $(this);
    blockNo.push([cell.data('a'),cell.data('b')])
 });      
});
var frame = $('.block');
var blockNo = [];

frame.each(function( index ) {
    // a new array ("row") for each .block element
    var row = [];

    // fill it up with values
    $(this).children().each(function() {
        row.push([this.getAttribute("data-a"), this.getAttribute("data-b")]);
    });

    // add it to blockNo
    blockNo.push(row);
});
var blocksArray = $('.block').find('.inner').map(function(){
    return [[$(this).data('a'),$(this).data('b')]];
}).get();