Вот что я пытаюсь сделать:
до:
+---+---+---+---+
| | | | |
+---+---+---+---+
| | | | |
+---+---+---+---+
| | | | |
+---+---+---+---+
| | | | |
+---+---+---+---+
после:
+---+---+---+---+
| | | | |
+---+---+---+---+
| | | | |
+ +---+---+---+
| | | | |
+ +---+---+---+
| | | | |
+---+---+---+---+
Я понял это. Возможно, это не самое элегантное решение (и, честно говоря, оно освещает проблему, выходящую за рамки этого вопроса).
function replaceRowSpan(cell, rows) {
cell.attr("rowspan", rows);
var rowClass = getRowClass(cell);
if (rowClass) {
var rowNum = rowClass.split(/-/)[0].substring(1, rowClass.length - 1);
}
for (r = 1; r <= rows; r++) {
$("tr.y" + (rowNum + r).toString()).remove();
}
};
function getRowClass(el) {
var parentClasses = el.parent().attr('class')
if (!parentClasses) return;
var classList = parentClasses.split(/\s+/);
for (var i = 0; i < classList.length; i++) {
if (classList[i].charAt(0) === 'y') {
return classList[i];
}
}
};
replaceRowSpan(cellElement, 4);
<tr class="y0-0">
<td></td><td></td><td></td><td></td>
</tr>
<tr class="y1-0">
<td></td><td></td><td></td><td></td>
</tr>
<tr class="y2-0">
<td></td><td></td><td></td><td></td>
</tr>
Итак,
когда у меня есть ячейка td, которую я хочу расширить, я передаю элемент (cellElement)и количество строк (4) для replaceRowSpan ().
replaceRowSpan () добавляет диапазон строк к существующему td, а затем находит класс родительского элемента tr tr (через getRowClass ()).
затем выполняет итерации по остальным строкам, удаляя их первый элемент (nth-child (1)).
Itработает, но проблема в следующем: это работает только один раз .
Если я хочу развернуть ячейку в другом столбце (скажем, строка 3, столбец 3), то эти ячейки неболее длинное выравнивание, поскольку некоторые строки имеют 2 ячейки, а некоторые - 3. Итак, индекс удаляемых ячеек сбрасывается.
И расхождение накапливается каждый раз, когда я делаю это.
после:
+---+---+---+---+
| | | | |
+---+---+---+---+
| | | | |
+ +---+---+---+
| | | | |
+ +---+ +---+
| | | | |
+---+---+---+---+
Я думаю, что смогу обойти это путем подсчета клеток справа, а не слева . Тогда не будет иметь значения, сколько из них было заменено на строки - если я всегда добавляю данные в столбцы только слева направо.