Je veux transposer les lignes et les colonnes dans une table HTML, c'est-à-dire les lignes comme colonnes, les colonnes comme lignes.
De quelle façon je peux le faire ?
Exemple :
1 4 7
2 5 8
3 6 9
en tant que
1 2 3
4 5 6
7 8 9
Je veux transposer les lignes et les colonnes dans une table HTML, c'est-à-dire les lignes comme colonnes, les colonnes comme lignes.
De quelle façon je peux le faire ?
Exemple :
1 4 7
2 5 8
3 6 9
en tant que
1 2 3
4 5 6
7 8 9
html :
<table>
<tr>
<td>1</td>
<td>4</td>
<td>7</td>
</tr>
<tr>
<td>2</td>
<td>5</td>
<td>8</td>
</tr>
<tr>
<td>3</td>
<td>6</td>
<td>9</td>
</tr>
</table>
<p><a href="#">Do it.</a></p>
js :
$("a").click(function(){
$("table").each(function() {
var $this = $(this);
var newrows = [];
$this.find("tr").each(function(){
var i = 0;
$(this).find("td").each(function(){
i++;
if(newrows[i] === undefined) { newrows[i] = $("<tr></tr>"); }
newrows[i].append($(this));
});
});
$this.find("tr").remove();
$.each(newrows, function(){
$this.append(this);
});
});
return false;
});
Cela devrait fonctionner pour html arbitraire :
function swap( cells, x, y ){
if( x != y ){
var $cell1 = cells[y][x];
var $cell2 = cells[x][y];
$cell1.replaceWith( $cell2.clone() );
$cell2.replaceWith( $cell1.clone() );
}
}
var cells = [];
$('table').find('tr').each(function(){
var row = [];
$(this).find('td').each(function(){
row.push( $(this) );
});
cells.push( row );
});
for( var y = 0; y <= cells.length/2; y++ ){
for( var x = 0; x < cells[y].length; x++ ){
swap( cells, x, y );
}
}
Violon de travail :
Je cherchais un moyen non fâcheux de le faire et j'ai trouvé ceci :
const transposeTable = (tbody, newContainerType = "tbody") => {
const rows = Array.from(tbody.querySelectorAll("tr"))
const newTbody = document.createElement(newContainerType)
for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {
const row = rows[rowIdx]
const cells = Array.from(row.querySelectorAll("td, th"))
for (let cellIdx = 0; cellIdx < cells.length; cellIdx++ ) {
const cell = cells[cellIdx]
const newRow = newTbody.children[cellIdx] || document.createElement("tr")
if (!newTbody.children[cellIdx]) {
newTbody.appendChild(newRow)
}
newRow.appendChild(cell.cloneNode(true))
}
}
// Do live DOM manipulations only once for performance
tbody.parentElement.appendChild(newTbody)
tbody.parentElement.removeChild(tbody)
}
transposeTable(document.querySelector("tbody"))
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.