所以我正在尝试创建一个充满'卡'对象的'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的解决方案可以帮助我找到:从相应卡上的每一行获取信息。
答案 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 = {}移动到您的单元格循环中,以便为每个单元而不是每一行创建一张新卡