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

时间:2011-07-01 21:25:33

标签: php javascript jquery dom dynamic

我正在尝试使用下面的代码动态添加结束标记,然后打开,这样我每三个单元格创建一个新行。几乎工作,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>    

3 个答案:

答案 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();

jsFiddle

答案 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');   
}

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

答案 2 :(得分:0)

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