jquery sortable在排序前删除下一行

r8uurelv  于 2022-12-03  发布在  jQuery
关注(0)|答案(2)|浏览(141)

我有一个包含parentchild的表,如下所示。parent是可排序的。当我试图对任何父表进行排序时,我必须删除它的下一个child,并将其插入到新位置之后。

<table>
    <tr class="parent"><td>Parent1</td></tr>
    <tr class="child nosort"><td>Child1</td></tr>
    <tr class="parent"><td>Parent2</td></tr>
    <tr class="child nosort"><td>Child2</td></tr>
    <tr class="parent"><td>Parent3</td></tr>
    <tr class="child nosort"><td>Child3</td></tr>
</table>

因此,如果我将Parent1移到Parent2之后,它将看起来:

<table>       
    <tr class="parent"><td>Parent2</td></tr>
    <tr class="child nosort"><td>Child2</td></tr>
    <tr class="parent"><td>Parent1</td></tr>
    <tr class="child nosort"><td>Child1</td></tr>
    <tr class="parent"><td>Parent3</td></tr>
    <tr class="child nosort"><td>Child3</td></tr>
</table>

我已经完成了在sortupdate之后插入子行,但是还不知道如何在排序之前删除子行。下面是在start上编写的代码。

$('table').sortable({
    items: 'tr:not(.nosort)',
    start: function( event, ui ) {
        // Removal code of child before sort
        var objChild = ui.item.next();
        if( objChild.hasClass('child') ) {
            objChild.remove();
        }
    },
    update: function( event, ui ) {
    //  insertion code of child
    }
});
icomxhvb

icomxhvb1#

准确回答您的问题:

  • 将下一个元素存储到每个.parentdata-*属性中
  • 在可排序的start事件上,使用Use jQuery's .detach()将子元素存储到数据中。
  • 在可排序的stop事件上,使用.after() ti插入先前分离的元素

第一个
但正如您所知,您可能最终也会得到P2 P1 C1 C2 ...但这不是您要问的问题。否则,要解决该问题,最好的方法是返回到白板,将两个<div>放在一个<td>

tp5buhyn

tp5buhyn2#

我知道这是一个旧的线程,但我认为我的答案可以帮助一些人了。这里是一个更新版本的Roko C. Buljan的帖子。
在这个版本中,子对象是不可拖动的,但父对象是可拖动的。当父对象中的一个被拖动时,子对象会暂时“分离”,使用内置的.detach()Jquery方法,并被添加到全局对象中。一旦父对象完成拖动,子对象就会按原来的顺序被添加回DOM中。
第一个

相关问题