2

我正在尝试使用 .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

4 回答 4

4

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

但是,您可以这样做:

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

工作演示

于 2013-05-20T16:57:28.480 回答
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/

于 2013-05-20T17:00:39.917 回答
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/

于 2013-05-20T17:29:48.033 回答
0

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

$('#table td:nth-child(4n)').each(function() { 
    $('<tr>').html($(this).nextAll()).appendTo('#table tbody');
});
于 2013-05-20T17:26:30.203 回答