2013-05-20 73 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/

相關問題