2013-06-22 7 views
0

Итак, я пытаюсь создать массив колоды, заполненный объектами «card». Объект 'card' нуждается в этом атрибуте .front и .back.wikipedia table parsing, loop issue

.front должен содержать ячейку каждой строки, также как и первый столбец. .back должен содержать остальную информацию каждой строки.

«тр» = строка

«тр тд» = ячейка

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

У меня есть проблема в том, что .Задняя для всех объектов карты является последней ячейкой.

ex. http://en.wikipedia.org/wiki/List_of_U.S._states, когда я нажимаю на таблицу со списком штатов США, все card.back === 'Wyoming Territory'

Итак, решение, которое я скачу StackOverflow, может помочь мне найти: получение информации из каждой строки , на соответствующей карте.

ответ

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); 
    } 
}); 
+0

спасибо, он сделал трюк – ntoscano

0

Вы создаете новую карту на каждой строке, перебираете по ячейкам и устанавливаете card.back на значение ячейки. Конечно, ваша карта всегда имеет значение последней ячейки.

Решения: Попробуйте переместить карту = {} в свою мобильной петлю, так что вы создаете новую карту для каждой ячейки вместо каждой строки