【问题标题】:Using .after to add a </tr><tr> is not working使用 .after 添加 </tr><tr> 不起作用
【发布时间】:2012-02-02 07:15:00
【问题描述】:

我有一个table,目前每行有两列,我需要使用 jQuery 对其进行拆分。

我试过了:

$(document).ready(function() {
    $('.TextBold').after('</tr><tr>');
});

...但它不起作用。我想知道是否可以在那里添加&lt;p&gt;Test&lt;/p&gt; 而不是&lt;/tr&gt;&lt;tr&gt;

在这里你可以在 JSFiddle 中看到我的代码 ..http://jsfiddle.net/QjJhU/

如果有人能解释这个问题,我将不胜感激。

【问题讨论】:

  • 您应该知道,在 JavaScript 中,您不会添加 标签,例如 '&lt;/tr&gt;&lt;tr&gt;'。您只能使用整个 DOM 元素。
  • 感谢所有回复我帖子的人,这对我来说是新课!

标签: jquery html jquery-ui


【解决方案1】:

问题在于您想象 jQuery(和一般的 Javascript)编辑 HTML 文档。它没有。浏览器读取 HTML,然后从中创建一个 DOM 结构。那时,HTML 内容完全无关紧要。浏览器唯一关心的是 DOM 结构。

这意味着您不能添加部分元素:您只能将整个元素(或文本节点)添加到文档中。您正在尝试关闭一个标签(使用&lt;/tr&gt;)然后打开另一个标签(使用&lt;tr&gt;)。事实上,浏览器读取&lt;/tr&gt;&lt;tr&gt; 并从中生成一个 DocumentFragment。由于结束标签本身无效,因此将其删除。然后&lt;tr&gt; 本身就变成了一个完整的元素:实际上,&lt;tr&gt;&lt;/tr&gt;。这是有效的 HTML,因此它被转换为有效的 DOM 元素并被插入。

您需要找到一种方法,从一个 tr 中删除 td,创建一个新的 tr 并将 td 添加到其中。

这样的事情应该可以工作:

$('.TextBold').each(function() {
    $('<tr/>').insertAfter(this.parentNode).append($(this).next());
});

这说:

  • 对于每个TextBold 元素,执行以下操作:
    • 创建一个新的tr 元素
    • TextBold 的父元素(即tr)之后插入它
    • TextBold 后面的元素附加到新的tr(这也具有将其从当前位置移除的效果)

Here's a jsFiddle with this working code.

【讨论】:

    【解决方案2】:

    试试吧:

    $('.TextBold').each(
        function(){
            $('<tr />').insertAfter($(this).parent()).append($(this).next('td'));
        });
    

    JS Fiddle demo.

    您的方法不起作用的原因是 JavaScript 和 jQuery 创建 DOM 节点,而不是这样的标记。因此,您不能添加关闭 &lt;/tr&gt; 和打开 &lt;tr&gt; 标记,只能添加包含整个节点的 DOM 节点。

    关于你的问题:

    我想知道我可以在那里添加&lt;p&gt;Test&lt;/p&gt; 而不是&lt;/tr&gt;&lt;tr&gt;

    老实说,我无法完全理解您的意思;但是在table 内部和tdth外部p 将导致标记无效,因为p 不是@ 的有效子级987654339@、tfoottheadtrtable


    编辑以更新已发布的 jQuery,将 parent() 替换为 closest()

    $('.TextBold').each(
        function(){
            $('<tr />').insertAfter($(this).closest('tr')).append($(this).next('td'));
        });
    

    JS Fiddle demo.

    参考资料:

    【讨论】:

    • 很高兴能帮上忙! =)
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多