我们使用该函数的change
选项成功解决了类似(但不相同)的问题。sortable
我们的问题是我们在两列列表中有一些“高”的 LI 元素,当这些高元素在第一列时,其他项目会堆积在与高元素相邻的第二列中,因为所有 LI 元素都是float: left
. 这会在排序时产生非常奇怪的交互。
为了解决这个问题,您可以应用clear: both
到第一列中的所有 LI 元素(所有奇数元素),但是在排序中间会出现问题,因为列表中有一个额外的 LI 元素具有绝对定位(一个被拖动),它会抛出偶数和奇数选择器。
解决方案是使用change
在排序期间每次 DOM 更改时调用的回调。然后,您可以使用 jquery 准确找出哪些是实际在第一列中的 LI 元素并应用于clear: both
这些元素。
function setClearsOnFirstColumn() {
var colNum = 0;
$(".myList").find( "li:not(.ui-sortable-helper)" ).each( function() {
var thisLiEl = $(this);
if( colNum == 0 )
thisLiEl.css( "clear", "both" );
else
thisLiEl.css( "clear", "none" );
colNum ++;
if( colNum == 2 ) colNum = 0;
} );
}
$(".myList").sortable( { change: setClearsOnFirstColumn, stop: setClearsOnFirstColumn } );
选择器的一部分用于在确定第一列中的 LI 元素是哪些时not
忽略被拖动的 LI 元素(由其类标识)。.ui-sortable-helper
(也可以通过使用偶数和奇数的 jquery 选择器来缩短它——这里不是这样做的,只是因为片段是从更一般的情况改编的,以支持列表中的两列以上。)
请注意,您还需要setClearsOnFirstColumn
在列表最初呈现后调用。)