【发布时间】:2011-01-23 15:20:28
【问题描述】:
我在 Google 上搜索了 merge+cell+Javascript,但没有找到任何合适的代码来实现表格中的合并单元格。
是否有任何指导方针可以让我使用 Javascript 制作 MS-WORD 表格单元格合并之类的功能。
寻求您的建议。
【问题讨论】:
标签: javascript html merge
我在 Google 上搜索了 merge+cell+Javascript,但没有找到任何合适的代码来实现表格中的合并单元格。
是否有任何指导方针可以让我使用 Javascript 制作 MS-WORD 表格单元格合并之类的功能。
寻求您的建议。
【问题讨论】:
标签: javascript html merge
如果您可以自己编写 javascript 代码,那么移除第二个单元格并将第一个单元格的 colspan 增加一个应该很容易。
【讨论】:
nextSibling 或jQuery 的选择器检查您的单元格的邻居。如果有问题的单元格不在同一行,只需取消操作..
如果我理解正确的话。
在 html 中称为 colspan 和 rowspan。有关使用 jQuery 的示例代码,请参阅此 link。
【讨论】:
此示例将在 4x4 表格中显示 16 个单元格,如果您单击两个或多个单元格,然后单击合并按钮,则会将单元格内容合并到最早的单元格中。使用老式 javascript(根据问题标签)完成,但很容易转换为 jquery。
在 Firefox 中测试,但应该可以在大多数现代浏览器中使用。
这是你想要做的吗?
<html>
<head>
<title>Test Merge</title>
<style type="text/css">
td {border: solid 1px black; background:gray; padding:5px; margin:10px; }
</style>
</head>
<body>
<table>
<tr>
<td id="cell-1-1" onclick="merge(this);">a</td>
<td id="cell-1-2" onclick="merge(this);">b</td>
<td id="cell-1-3" onclick="merge(this);">c</td>
<td id="cell-1-4" onclick="merge(this);">d</td>
</tr>
<tr>
<td id="cell-2-1" onclick="merge(this);">e</td>
<td id="cell-2-2" onclick="merge(this);">f</td>
<td id="cell-2-3" onclick="merge(this);">g</td>
<td id="cell-2-4" onclick="merge(this);">h</td>
</tr>
<tr>
<td id="cell-3-1" onclick="merge(this);">i</td>
<td id="cell-3-2" onclick="merge(this);">j</td>
<td id="cell-3-3" onclick="merge(this);">k</td>
<td id="cell-3-4" onclick="merge(this);">l</td>
</tr>
<tr>
<td id="cell-4-1" onclick="merge(this);">m</td>
<td id="cell-4-2" onclick="merge(this);">n</td>
<td id="cell-4-3" onclick="merge(this);">o</td>
<td id="cell-4-4" onclick="merge(this);">p</td>
</tr>
</table>
<input type="button" id="merge" value="merge" onclick="mergeHighlighted();" />
</body>
</html>
<script language="javascript" type="text/javascript">
function merge(o) {
o.style.backgroundColor = "red";
}
function mergeHighlighted() {
var tds = document.getElementsByTagName("td");
var firstCellId = "";
var mergedCells = "";
for (var i = 0; i < tds.length; i++) {
if (tds[i].style.backgroundColor == "red") {
mergedCells += tds[i].textContent;
if (firstCellId == "") {
firstCellId = tds[i].id;
}
else {
tds[i].style.backgroundColor = "gray";
tds[i].style.display = "none";
tds[i].textContent = "";
}
}
}
var firstCell = document.getElementById(firstCellId);
firstCell.textContent = mergedCells;
firstCell.style.backgroundColor = "gray";
}
</script>
【讨论】:
您可以使用Table.js,这是我编写的一个独立的 JavaScript 库,用于操作复杂的表格。你可以使用这样的东西:
var mytable = new Table(document.getElementById('mytable')),
cell1 = document.getElementById('cell1'),
cell2 = document.getElementById('cell2');
mytable.merge([cell1, cell2], function(colspan, rowspan, newcell, oldcell){
// colspan is the future value of the "colSpan" attribute of newcell
// rowspan is the future value of the "rowSpan" attribute of newcell
// newcell is the cell that is kept
// oldcell is the cell that will be removed
// Do what you want here
});
函数的第一个参数是HTMLTableCellElement 中的Array(<TD> 或<TH> 元素)或NodeList。第二个参数是可选的,是一个回调,每当两个单元格合并在一起时都会调用它。
默认情况下,当调用<TableObject>.merge() 时,Table.js 被限制为 50 次合并。你可以改变这个
window.Table.maxIteration = 100;
你也可以使用类似的函数<TableObject>.mergeHorizontal(cells, callback)和<TableObject>.mergeVertical(cells, callback)。
【讨论】: