使用jQuery修改HTML表的结构



我有一个元素列表(以下示例中的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代码。

但是,我想在两列中显示我的元素列表。换句话说,我的表的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>

考虑到您提供的其他信息,我认为这正是您想要的。它遍历表格,将单元格从第二行移动到前一行。。。

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();
    }
}

有趣的练习。这符合你的要求,但可能并不是你想要的。但它告诉你怎么做。你可以

将其调整到您期望的工作方式。

<!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循环,使其沿着

这条线运行

假设你从每行中的一个单元格开始,每个单元格都有一个标签和一个输入,那么我认为你想要这样的东西:

$('#myTable tr').each(function() {
    $('<td/>').append( 
      $(this).find('td input') 
    ).appendTo(this);
  });

相关内容

  • 没有找到相关文章

最新更新