【发布时间】:2015-09-21 17:04:23
【问题描述】:
我正在使用 jQuery 克隆。源表有 .donor 类,它应该是创建三个表的基础:#clone-head, #clone-cols, #clone-intersect.
- 将原始表 (.donor) 的前两行 [?rows?] 克隆到表中 #clone-head
- 将原始表 (.donor) 的前两列克隆到表中#clone-cols
- 将两个表(表#clone-head 和表#clone-cols)的交集克隆到表#clone-intersect 中
问题源于克隆的单元格是属性 colSpan 和 RowSpan;
<table class="donor" data-fix-rows="2" data-fix-cols="2">
<tbody>
<tr>
<th colspan="2" rowspan="2">User</th>
<th colspan="2">First</th>
<th colspan="2">Second</th>
<th colspan="2">Third</th>
</tr>
<tr>
<th>A1</th>
<th>B1</th>
<th>A2</th>
<th>B2</th>
<th>A3</th>
<th>B3</th>
</tr>
<tr>
<td>000</td>
<td>Suzy</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><td>001</td>
<td>Ashley</td>
<td></td>
<td>585 794,76</td>
<td>711 436,05</td>
<td>127 248,00</td>
<td>1 289 982,81</td>
<td></td>
</tr>
<tr><td>002</td>
<td>Simona</td>
<td>489 826,30</td>
<td></td>
<td>591 025,64</td>
<td></td>
<td>1 080 851,94</td>
<td></td>
</tr>
<tr><td>003</td>
<td>Nicky</td>
<td>263 111,43</td>
<td></td>
<td>304 993,43</td>
<td></td>
<td>568 104,86</td>
<td></td>
</tr>
<tr><td colspan="2">Total</td>
<td>37 060 549,32</td>
<td></td>
<td></td>
<td></td>
<td>81 508 922,07</td>
<td>585 794,76</td>
</tr>
<tr>
<td colspan="2">Total Cost</td>
<td>37 060 549,32</td>
<td>585 794,76</td>
<td>44 455 620,75</td>
<td>127 248,00</td>
<td>81 508 922,07</td>
<td>585 794,76</td>
</tr>
</tbody>
</table>
<div id="clone-head"></div><div id="clone-cols"></div><div id="clone-intersect"></div>
我的 Javascript 代码:
$.fn.getNonColSpanIndex = function() {
if (!$(this).is('td') && !$(this).is('th')) {
return -1;
}
var allCells = this.parent('tr').children();
var normalIndex = allCells.index(this);
var nonColSpanIndex = 0;
allCells.each(function(i, item) {
if (i == normalIndex)
return false;
var colspan = $(this).attr('colspan');
colspan = colspan ? parseInt(colspan) : 1;
nonColSpanIndex += colspan;
});
return nonColSpanIndex;
};
var $donor = $('.donor');
var fix_rows = $donor.data('fix-rows');
var fix_cols = $donor.data('fix-cols');
fix_rows--;
fix_cols--;
/* clone head -- */
var clone_header = $donor.find('tbody').clone();
clone_header.find('tr:gt(' + fix_rows + ')').remove();
$('#clone-head').html('<table class="t-header">' + clone_header.html() + '</table>');
/* -- clone head */
/* clone cols -- */
var clone_cols = $donor.find('tbody').clone();
var isRowSpan = 0;
clone_cols.find('tr').each(function(i, element) {
$(element).find('th,td').each(function(index, el) {
if (isRowSpan > 0) {
$(el).remove();
}
if (el.rowSpan > 0) {
isRowSpan = el.rowSpan;
}
if ($(el).getNonColSpanIndex() > fix_cols) {
$(el).remove();
}
});
if (isRowSpan > 0) {
isRowSpan--;
}
});
$('#clone-cols').html('<table class="t-cols">' + clone_cols.html() + '</table>');
/* -- clone cols */
/* clone intersect -- */
var clone_intersect = $('#clone-head').find('tbody').clone();
clone_intersect.find('th:gt(' + fix_rows + '),td:gt(' + fix_rows + ')').remove();
$('#clone-intersect').html('<table class="t-intersect">' + clone_intersect.html() + '</table>');
/* -- clone intersect */
【问题讨论】:
-
我的编辑是否符合您的问题?据我了解,您只是在十字路口遇到麻烦 - 是这样吗?
-
不完全一样,用#clone-cols也有问题...
-
如果您将表格缩短为仅包含您需要的行和列,并且只发布您遇到问题的 javascript,则更容易提供帮助。
-
那么,正如我在小提琴中看到的那样,您的第一个任务还可以,而您在第二个和第三个任务中挣扎?而且,第三个是克隆未在 1) 和 2) 中克隆的剩余表?
-
是的,有必要
标签: jquery html-table clone