我正在尝试使用下面的代码动态添加结束标记,然后打开,这样我每三个单元格创建一个新行。几乎工作,DOM检查器显示一个TR节点,问题是,发生的事情tr没有关闭tr标签。我是Jquery的新手,这个代码有什么问题吗?
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('td:nth-child(3n)').after('</tr><tr>');
});
</script>
<table id="mytable" width="266" border="1" cellspacing="10" cellpadding="10">
<tbody>
<tr>
<?php
function somelongassfunction(){
return 'Hello';
}
function have_products($a){
return $a<=20;
}
$x=0;
while (have_products($x)) {
echo '<td>' . somelongassfunction() . '</td>';
$x++;
//-------------------------------------
/*if (fmod($x,3) == 0) {
echo '</tr><tr>';
continue;
}*/
//--------------------------------------
if ($x==20){
break;
}
}
?>
</tr>
</tbody>
</table>
答案 0 :(得分:3)
您无法处理DOM选择,就像它是HTML文档一样。 DOM文档是节点的层次结构,而不是标签的层次结构。 HTML中的标记由浏览器解析到DOM文档中。然后,您不能添加一点HTML,然后期望将其解析回DOM结构。
相反,你需要在jQuery中进行包装。这是一种可行的方法 - 它可能不是最有效的方法。
$('td').each(function(idx) {
if (idx % 3) {
return;
} else {
$(this).nextAll(':lt(2)').andSelf().wrapAll('<tr/>');
}
}).parent().unwrap();
答案 1 :(得分:2)
另一种方法是detach
所有td
个元素,然后使用splice
将它们分成3个组:
var td = $('tr td').detach();
$('tr').remove();
while(td.length>0){
$(td.splice(0,3)).wrapAll('<tr />').parent().appendTo('tbody');
}
答案 2 :(得分:0)
正如lonesomeday所说,你不能像对待一些HTML那样对待DOM。此外,TR closing tags are optional因此,当您使用开放TR插入一些标记时,浏览器将关闭它。您不需要结束标记。