【问题标题】:how to insert a <td> to a <tr> using jquery如何使用 jquery 将 <td> 插入到 <tr>
【发布时间】:2014-03-10 17:25:12
【问题描述】:

我有一个 table 有几行,我只需要重新排列它们,我能够获取 &lt;td&gt;&lt;tr&gt; 现在我需要做的是以自定义顺序将它们插入回来

 $('.white-header').each(function() {  //white-header is the class used for <tr>
    var tr = $(this);

    var td1 = tr.find('td:eq(4)'); // indices are zero-based here
    var td2 = tr.find('td:eq(5)');
    var td3 = tr.find('td:eq(6)');
    var td4 = tr.find('td:eq(7)');
    var td5 = tr.find('td:eq(8)');
    var td6 = tr.find('td:eq(9)');
    var td7 = tr.find('td:eq(10)');
    td1.remove();
    td2.remove();
    td3.remove();
    td4.remove();
    td5.remove();
    td6.remove();
    td7.remove();
    tr.insert(td7); // here am getting errors, i tried .append also
    tr.insert(td6);
    tr.insert(td4);
});

我只需要知道如何将td 插入到这个tr(目前tr 是空白我猜,在删除所有td 之后)

【问题讨论】:

  • insert 不是 jQuery 方法。使用append
  • 查看api.jquery.com/category/manipulation 了解操作 DOM 的各种方法。
  • append 也不起作用,这是一些 jquery 版本问题,还是因为我正在这样做:-(
  • @user3239473 与您上次编辑,如果您不知道,您已删除所有格式和代码缩进

标签: javascript jquery dom-manipulation


【解决方案1】:

你根本不需要.remove()。您只需要巧妙地使用appendprepend(或appendToprependTo)来重新排列您的单元格。这些方法不会复制 DOM 节点,它们会移动它们,因此完全不需要移除。

Quick example:

$('.white-header').each(function() {
    var tr = $(this);  

    tr.find('td:eq(4)').appendTo(tr);
    tr.find('td:eq(6)').appendTo(tr);
    tr.find('td:eq(9)').prependTo(tr);
});

(在我的示例中,元素的顺序最后可能看起来很奇怪,因为我没有按原始顺序运行 :eq,而是始终按已更改的顺序运行 - 这只是一个简单的示例)

【讨论】:

    【解决方案2】:

    尝试使用.detach()

    $('.white-header').each(function() {  //white-header is the class used for <tr>
        var tr = $(this);    
    
        var td1 = tr.find('td:eq(4)').detach(); // indices are zero-based here
        var td2 = tr.find('td:eq(5)');
        var td3 = tr.find('td:eq(6)').detach();
        var td4 = tr.find('td:eq(7)').detach();
        var td5 = tr.find('td:eq(8)');
        var td6 = tr.find('td:eq(9)');
        var td7 = tr.find('td:eq(10)');
        td1.remove();
        td2.remove();
        td3.remove();
        td5.remove();
    
        tr.append(td7); // here am getting errors, i tried .append also
        tr.append(td6);
        tr.append(td4);    
    });
    

    【讨论】:

    • 不客气,代码在原始帖子中没有缩进,所以我想所有的答案都会有问题(:
    【解决方案3】:

    您正在尝试附加 已删除 对象,您需要克隆&lt;td&gt; 并删除您稍后附加的克隆对象的&lt;td&gt; 对象插入

    $('.white-header').each(function() {  //white-header is the class used for <tr>
        var tr = $(this);
        var td1 = tr.find('td:eq(4)'); // indices are zero-based here
        var td2 = tr.find('td:eq(5)');
        var td3 = tr.find('td:eq(6)');
        var td4 = tr.find('td:eq(7)');
        var td5 = tr.find('td:eq(8)');
        var td6 = tr.find('td:eq(9)');
        var td7 = tr.find('td:eq(10)');
        td1.remove();
        td2.remove();
        td3.remove();
        td4Cloned = td4.clone();
        td4.remove();
        td5.remove();
        td6Cloned = td6.clone();
        td6.remove();
        td7Cloned = td7.clone();
        td7.remove();
    
        tr.insert(td7Cloned); // here am getting errors, i tried .append also
        tr.insert(td6Cloned);
        tr.insert(td4Cloned);
    });
    

    【讨论】:

    • .remove() 不会破坏 DOM 元素,它只是将其与其父元素分离!
    • 与 .empty() 类似,.remove() 方法将元素从 DOM 中取出,api.jquery.com/remove
    • @UweB 那.detach()有什么用?
    • 正如文档中所指出的,分离将保留任何.data(),而.remove() 不会。
    • @RajaprabhuAravindasamy,我制作了一个 JSFiddle 来说明 .remove() 的作用:使用 remove (jsfiddle.net/KELMP),.data('x') 被破坏,而 detach (jsfiddle.net/KELMP/1) 保留它。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2019-05-22
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多