2012-01-04 3 views
0

Я захватывая данные из выбранных ячеек таблицы с этим JavaScript:Создание строки из таблицы с .each, как добавить новую строку после каждой строки?

var cellIndexMapping = { 0: true, 1: true, 3:true, 4:true, 5:true}; 
var data = []; 

$j("#myTable tr").each(function(rowIndex) { 
    $j(this).find("td").each(function(cellIndex) { 
     if (cellIndexMapping[cellIndex]) 
      data.push($j(this).text() ); 
    }); 
}); 

var fullCSV = data.join(", "); 
console.log (fullCSV); 

Это дает мне все мои таблицы элементов в массиве, разделенные запятыми. Так, например, если мой стол

<th>| zero | one | two | three | four | five | </th> 
--------------------------------------------- 
<tr>| A | B | C | D | E | F | </tr> 
--------------------------------------------- 
<tr>| G | H | I | J | K | L | </tr> 

я вернусь:

A,B,D,E,F,G,H,J,K,L 

Что мне нужно иметь это символ новой строки "\n" между каждой строки. Таким образом, мой желаемый результат будет выглядеть так:

A,B,D,E,F,\n G,H,J,K,L \n 

Любые идеи?

ответ

1
var cellIndexMapping = { 0: true, 1: true, 3:true, 4:true, 5:true}, 
    data = [], 
    finalData = []; 

$j("#myTable tr").each(function(rowIndex) { 
    data.push([]); 

    $j(this).find("td").each(function(cellIndex) { 
     if (cellIndexMapping[cellIndex]) 
      data[rowIndex].push($j(this).text()); 
    }); 
}); 

$j.each(data, function(i, e) { 
    finalData.push(e.join(',')); 
}); 

finalData.join("\n"); 

В качестве альтернативы, вы можете просто добавить \n в каждом цикле:

var cellIndexMapping = { 0: true, 1: true, 3:true, 4:true, 5:true}, 
    finalData = ''; 

$j("#myTable tr").each(function(rowIndex) { 
    var data = []; 
    $j(this).find("td").each(function(cellIndex) { 
     if (cellIndexMapping[cellIndex]) 
      data.push($j(this).text()); 
    }); 

    finalData += data.join(', ') + "\n"; 
}); 

Смотрите эту скрипку: http://jsfiddle.net/kLsW5/

+0

Это прекрасно работает! Спасибо. – Zac

1

Вам просто нужно добавить его в конце внешнего цикла :

var res = ""; 
$j("#myTable tr").each(function(rowIndex) { 
    var data = []; 
    $j(this).find("td").each(function(cellIndex) { 
     if (cellIndexMapping[cellIndex]) 
      data.push($j(this).text() ); 
    }); 
    res += data.join(", ") + "\n"; 
}); 

Теперь res имеет окончательное значение.

+0

Спасибо, это работает, но теперь у меня есть запятая в начале каждой строки. – Zac

+0

@Zac - Конечно, посмотрим, работает ли мое редактирование для вас. –

+0

Спасибо за помощь. Я все еще не могу заставить его правильно вернуться с этим. Решение Joesph хорошо работало для меня, поэтому я просто справлюсь с этим. – Zac

1

Вы действительно хотите получить конечную запятую в первой строке? Вы не хотите что-то вроде:

A,B,D,E,F\nG,H,J,K,L\n 

Вот способ использования .map()[docs]:

var cellIndexMapping = { 0: true, 1: true, 3:true, 4:true, 5:true};  

var fullCSV = $j("#myTable tr").map(function() { 

    return $j(this).find("td").map(function(cellIndex) { 
     return cellIndexMapping[cellIndex] ? $j(this).text() : null; 
    }).get().join(', '); 

}).get().join('\n'); 
+0

Да, это была опечатка. Я только что получил [объект HTMLTableCellElement], хотя. Я использую решение Джозефа. Спасибо за помощь. – Zac

+0

Забыл изменить внутреннюю 'each' на' map'. Он работает сейчас: http://jsfiddle.net/KPWr6/2/ –

Смежные вопросы