我有一个元素列表(以下示例中的 X )显示在HTML表格的行或列中。
在HTML代码的角度来看,我有(水平显示):
<table id="myTable">
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
...
</tr>
</table>
或(垂直显示):
<table id="myTable">
<tr>
<td>A</td>
</tr>
<tr>
<td>B</td>
</tr>
<tr>
<td>C</td>
</tr>
...
</table>
此HTML代码由JSF组件(称为<h:selectManyCheckboxes/>
)生成,因此,我无法控制此HTML代码。
但是,我想在2列中显示我的元素列表。 换句话说,我的表的HTML代码将是这样的:
<table id="myTable">
<tr>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>C</td>
<td>D</td>
</tr>
...
</table>
我如何使用jQuery做到这一点?
提前感谢您的帮助。
ps:如果你需要知道,X实际上是一个输入和一个标签,即:
<td><input .../><label .../></td>
答案 0 :(得分:2)
有趣的运动。这就是你要求的,但它可能不是你想要的。但它告诉你如何做到这一点。你可以
将其调整到符合预期的工作位置。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Example of restructuring tables</title>
<script src="Scripts/jquery-1.2.6.commented.js"></script>
</head>
<!--<body><table id="Table1">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</table>-->
<table id="myTable">
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
<script type="text/javascript">
$(document).ready(function() {
debugger;
var tds = $("#myTable tr td"); // gets all td elements in the table with id myTable
var col1 = $("<tr></tr>"); // holds our first row's columns
var col2 = $("<tr></tr>"); // holds our second row's columns
var halfway = Math.ceil(tds.length / 2);
// add the first half of our td's to the first row, the second half to the second
for (var i = 0; i < tds.length; i++) {
if (i < halfway)
col1.append(tds[i]);
else
col2.append(tds[i]);
}
// clear out the clutter from the table
$("#myTable").children().remove();
// add our two rows
$("#myTable").append(col1);
$("#myTable").append(col2);
});
</script>
</body>
</html>
请参阅,您希望它最终将所有内容分成两行的示例,但您的问题是“两列”。我做了两行只是因为它更容易。你只需要修改for循环,使其沿着这条线更多
答案 1 :(得分:2)
鉴于您提供的其他信息,我认为这就是您想要的。它遍历表格,将单元格从每隔一行移动到前一行......
var idx = 1;
var row, next;
while((row = $('#myTable tr:nth-child(' + idx++ + ')')).length) {
if((next = $('#myTable tr:nth-child(' + idx + ')')).length) {
row.append(next.find('td'));
next.remove();
}
}
答案 2 :(得分:1)
假设您从每行中的一个单元格开始,并且每个单元格都有一个标签和一个输入,那么我认为您需要这样的内容:
$('#myTable tr').each(function() {
$('<td/>').append(
$(this).find('td input')
).appendTo(this);
});