2013-05-20 37 views
2

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

这里是小提琴文件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> 
+1

您需要创建新的''元素并将正确的'​​'元素附加到它们。 – Jasper

回答

4

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

但是,您可以不喜欢它:

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

Working Demo

+1

比我开始想到的要好得多。 – j08691

+0

@ j08691 - 谢谢。 :-) – techfoobar

+0

谢谢。非常感谢你。 – Brogers

0

另一个可能sollution(DEMO):

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

这里是2种的替代选择:

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/

相关问题