我可以使用Jquery在动态表中插入结束标记和开放标记吗?

我正在尝试使用下面的代码动态添加结束标记,然后打开,以便我每三个单元格创建一个新行。 几乎工作,DOM检查器显示一个TR节点,问题是,发生的事情tr没有关闭tr标签。 我是Jquery的新手,这个代码有什么问题吗?

  $(document).ready(function(){ $('td:nth-child(3n)').after(''); });   <?php function somelongassfunction(){ return 'Hello'; } function have_products($a){ return $a<=20; } $x=0; while (have_products($x)) { echo ''; $x++; //------------------------------------- /*if (fmod($x,3) == 0) { echo ''; continue; }*/ //-------------------------------------- if ($x==20){ break; } } ?> 
' . somelongassfunction() . '

您不能像选择HTML文档一样处理DOM选择。 DOM文档是节点的层次结构,而不是标签的层次结构。 HTML中的标记由浏览器解析为DOM文档。 然后,您不能添加一点HTML,然后期望将其解析回DOM结构。

相反,你需要在jQuery中进行包装。 这是一种可行的方法 – 它可能不是最有效的方法。

 $('td').each(function(idx) { if (idx % 3) { return; } else { $(this).nextAll(':lt(2)').andSelf().wrapAll(''); } }).parent().unwrap(); 

的jsfiddle

另一种方法是detach所有td元素,然后使用splice将它们分成3组:

 var td = $('tr td').detach(); $('tr').remove(); while(td.length>0){ $(td.splice(0,3)).wrapAll('').parent().appendTo('tbody'); } 

示例: http : //jsfiddle.net/niklasvh/C6unV/

正如lonesomeday所说,你不能像对待一些HTML那样对待DOM。 此外, TR结束标记是可选的,因此当您使用开放TR插入一些标记时,浏览器将关闭它。 您不需要结束标记。