在第4个元素Jquery之后添加表格行

时间:2013-05-20 16:42:07

标签: jquery

我正在尝试使用.after()方法在每个第4个元素之后开始一个新行 我的逻辑是关闭行标记并在第四个元素后面开始一行。不是关闭行并开始新行,而是创建一个新的空行。

这是小提琴文件http://jsfiddle.net/b4xhG/1/

Jquery代码

   $("#table td:nth-child(4n)").after("</tr>  <tr>");

这就是它的显示方式

<table id="table" border="1px" width="500px">
    <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
    <td>9</td>
    </tr>
</table>

这是它应该显示的方式。

<table id="table" border="1px" width="500px">
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
    </tr>
        <tr>
            <td>5</td>
            <td>6</td>
            <td>7</td>
            <td>8</td>
        </tr>
        <tr>
            <td>9</td> 
        </tr>
</table>

4 个答案:

答案 0 :(得分:4)

您无法使用"</tr><tr>"插入无效/不完整的HTML片段(例如:after())。

但你可以这样做:

while($("#table td:nth-child(4n)").nextAll().length > 0) {
    $('<tr/>').append($("#table td:nth-child(4n)").nextAll()).appendTo('#table');    
}

<强> Working Demo

答案 1 :(得分:1)

var $td = $("#table td");

$td.each(function(i) {
    if (i % 4 === 0) {
        $td.slice(i, i+4).wrapAll('<tr/>');
    }
}).parent('tr').unwrap();

http://jsfiddle.net/ZyFUU/

答案 2 :(得分:0)

另一种可能的解决方案(DEMO):

$('#table td:nth-child(4n)').each(function() { 
    $('<tr>').html($(this).nextAll()).appendTo('#table tbody');
});

答案 3 :(得分:0)

以下是两种备选方案:

while($('#table').find('tr:last').children(':gt(3)').length > 0){
   $('#table').find('tr:last').after(
       $('#table').find('tr:last').children(':gt(3)')
           .wrapAll('<tr></tr>').parent().remove()
   );
}

Jsfiddle演示:http://jsfiddle.net/darkajax/MFTsu/

while($('#table').find('tr:last').children(':gt(3)').length > 0){
   var newRow = '';
   $('#table').find('tr:last').children(':gt(3)').each(function(i,e){
      newRow += $(e).prop('outerHTML');
   }).remove();
   $('#table').find('tr:last').after('<tr>' + newRow + '</tr>');
}

Jsfiddle演示:http://jsfiddle.net/darkajax/YgAMd/