Сообщение от рони
|
если у вас есть решение для любых прямоугольных вариантов, подскажите пожалуйста.
|
да в общем-то всё очевидно. Максимальный квадрат слева-сверху просто поворачиваем, для остального делаем перенос ячеек.
вот сие художество:
<!DOCTYPE HTML>
<html>
<head>
<title>title</title>
</head>
<body>
<table>
<tr><td>1<td>2<td>3
<tr><td>4<td>5<td>6
<tr><td>7<td>8<td>9
<tr><td>A<td>B<td>C
<tr><td>D<td>E<td>F
</table>
<button>Клик</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
function swapContent(elem1, elem2) {
var t = elem1.innerHTML;
elem1.innerHTML = elem2.innerHTML;
elem2.innerHTML = t;
}
function moveCells(table, b1, e1, b2, e2) {
for (var i = b1; i >= e1; --i) {
for (var j = b2; j < e2; ++j) {
table.rows[i].appendChild(table.rows[j].lastChild);
}
}
}
function transp(table) {
var h = table.rows.length;
var w = h && table.rows[0].cells.length;
if (!w) { return; }
var min = Math.min(w, h), max = Math.max(w, h);
// 1) поворачиваем квадратную часть таблицы
for (var i = 0; i < min; ++i) {
for (var j = i + 1; j < min; ++j) {
swapContent(table.rows[i].cells[j], table.rows[j].cells[i]);
}
}
if (w === h) { return; }
if (w > h) {
for (var i = min; i < max; ++i) {
table.insertRow(i);
}
moveCells(table, max - 1, min, 0, min);
} else {
moveCells(table, min - 1, 0, min, max);
for (var i = max - 1; i >= min; --i) {
table.deleteRow(i);
}
}
}
$('button').click(function(){
$("table").each(function() { transp(this); });
});
</script>
</body>
</html>