我正在尝试使用.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>
答案 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();
答案 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/