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

Posted

技术标签:

【中文标题】我可以使用 Jquery 在动态表中插入结束 </tr> 标记和开始 <tr> 标记吗?【英文标题】:Can I use Jquery to insert a closing </tr> tag and an opening <tr> tag inside a dynamic table? 【发布时间】:2011-09-27 01:24:21 【问题描述】:

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

【问题讨论】:

纯 php 解决方案不起作用? 【参考方案1】:

正如 lonesomeday 所说,您不能将 DOM 视为 html 的一部分。此外,TR closing tags are optional 所以当你插入一些带有打开 TR 的标记时,浏览器会关闭它。你不需要结束标签。

【讨论】:

【参考方案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/

【讨论】:

Niklas,您的回答有效 (+1),但影响了我页面中的所有表格,我应该如何更改才能使其适用于特定表格?谢谢:)【参考方案3】:

您不能像处理 HTML 文档一样处理 DOM 选择。 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

【讨论】:

以上是关于我可以使用 Jquery 在动态表中插入结束 </tr> 标记和开始 <tr> 标记吗?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 从 html 表中获取值

通过动态增加拆分在 oracle 中创建拆分分区

动态插入语句需要返回插入的ID

在由 AJAX 插入的动态创建元素上绑定事件(复选框)

试图在我的 SQL 表中插入多行。总是显示 SQL 命令未正确结束 [重复]

Jquery在某个索引处将新行插入表中