我有一个包含parent
和child
的表,如下所示。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
}
});
2条答案
按热度按时间icomxhvb1#
准确回答您的问题:
.parent
的data-*
属性中start
事件上,使用Use jQuery's.detach()
将子元素存储到数据中。stop
事件上,使用.after()
ti插入先前分离的元素第一个
但正如您所知,您可能最终也会得到P2 P1 C1 C2 ...但这不是您要问的问题。否则,要解决该问题,最好的方法是返回到白板,将两个
<div>
放在一个<td>
中tp5buhyn2#
我知道这是一个旧的线程,但我认为我的答案可以帮助一些人了。这里是一个更新版本的Roko C. Buljan的帖子。
在这个版本中,子对象是不可拖动的,但父对象是可拖动的。当父对象中的一个被拖动时,子对象会暂时“分离”,使用内置的.detach()Jquery方法,并被添加到全局对象中。一旦父对象完成拖动,子对象就会按原来的顺序被添加回DOM中。
第一个