维基百科表解析,循环问题

时间:2013-06-22 19:57:11

标签: javascript jquery parsing for-loop

所以我正在尝试创建一个充满'卡'对象的'deck'数组。 'card'对象需要atribute .front和.back。

.front需要包含每行的单元格,也就是第一列。 .back需要包含每行的其余信息。

'tr'= row

'tr td'= cell

rowArray = []
deck = []
$('tbody').click(function(){
    var rows = $(this).find('tr');
    var cells  = $(this).find('tr td');
    for (w = 0; w<cells.length; w++){
        if (cells[w].innerText === undefined){
        }
        else{
            rowArray.push(cells[w].innerText)
        }
        };
    for (var i =0; i < rows.length; i++){
        var card = {}
        var info =$(row[i]).find('td')
        var cardFront = info[0]
        card.front = $(cardFront).text()  
        for (var x=0; x< cells.length; x ++ ){
        if (cells[x].innerText === undefined){ // takes out all undefined cells
            }
        else{
            if (x % ((rows.length) / cells.length) !== 0){ // filters out the first column, so no repeat information
                card.back = cells[x].innerText; 
            }
            else{
            }
        }
     };
    deck.push(card);
    };
});

我遇到的问题是所有卡对象的.back是最后一个单元格。

离。 http://en.wikipedia.org/wiki/List_of_U.S._states,当我点击包含USstates列表的表格时,所有的card.back ==='怀俄明州地区'

因此,我正在跳过StackOverflow的解决方案可以帮助我找到:从相应卡上的每一行获取信息。

2 个答案:

答案 0 :(得分:1)

当您遍历单元格(for (var x=0; x< cells.length; x ++ ))时,您将迭代表格中的每个单元格,最后一个单元格是怀俄明州地区。相反,您希望迭代info,其中只包含给定行中的单元格。

rowArray = []
deck = []

$('tbody').click(function(){
    var rows = $(this).find('tr');
    var cells  = $(this).find('tr td');
    for (w = 0; w<cells.length; w++){
        if (cells[w].innerText === undefined){
        }
        else{
            rowArray.push(cells[w].innerText)
        }
        };
    for (var i =0; i < rows.length; i++){
        var card = {}
        var info =$(rows[i]).find('td')
        var cardFront = info[0]
        card.front = $(cardFront).text()

        // Remove first cell from info
        info = info.slice(1);
        card.back = info.map(function(i,e) { return e.innerText }).toArray();

        // Move this line inside the rows loop
        deck.push(card);
     }
});

答案 1 :(得分:0)

您在每一行上创建一张新卡,迭代单元格并将card.back设置为单元格的值。当然,您的卡片总是具有最后一个单元格的值。

解决方案:尝试将card = {}移动到您的单元格循环中,以便为每个单元而不是每一行创建一张新卡