我刚开始学习jQuery,现在对使用jQuery UI的sortable
感到十分困惑。
我想要创建一个网页来方便地对项目进行分组和排序。网页上有一些分组,每个分组内又包含一些项目。我希望用户能够执行以下操作:
- 重新排列分组
- 重新排列分组内的项目
- 在不同分组之间移动项目
前两个需求没有问题,我可以轻松地将它们排序。但是第三个需求出现了问题,我无法将这些列表连接起来。下面是一些代码,可能会有所帮助。这是标记:
<ul id="groupsList" class="groupsList">
<li id="group1" class="group">Group 1
<ul id="groupItems1" class="itemsList">
<li id="item1-1" class="item">Item 1.1</li>
<li id="item1-2" class="item">Item 1.2</li>
</ul>
</li>
<li id="group2" class="group">Group 2
<ul id="groupItems2" class="itemsList">
<li id="item2-1" class="item">Item 2.1</li>
<li id="item2-2" class="item">Item 2.2</li>
</ul>
</li>
<li id="group3" class="group">Group 3
<ul id="groupItems3" class="itemsList">
<li id="item3-1" class="item">Item 3.1</li>
<li id="item3-2" class="item">Item 3.2</li>
</ul>
</li>
</ul>
通过在document ready function
中加入$('#groupsList').sortable({});
和$('.itemsList').sortable({});
,我能够对列表进行排序。我尝试使用sortable
的connectWith
选项来使其工作,但失败得很惨。我想做的是将每个groupItemsX
列表连接到除自身以外的所有groupItemsX
列表。我该怎么做?
我想我需要明确不将一个列表与自身连接,否则可能会出现某种循环引用。虽然我没有使用Excel,但似乎这样做可能会导致一些无限递归的问题,从而引起栈溢出或其他问题。抱歉,我喜欢开玩笑。
无论如何,我正在尝试像这样做,但它并没有起作用:
$('.groupsList').sortable(); // worked great
$('.groupsList').each( function () {
$(this).sortable( {
connectWith: ['.groupsList':not('#'+ $(this).attr('id') )];
});
});
我相信我完全搞砸了语法,这也是我不得不首先提出问题的原因。从性能角度来看,过滤掉当前项目是否必要或者有帮助呢?
Adam和JimmyP提供的两个答案在IE上都工作正常(虽然在FireFox中行为非常奇怪,在尝试重新排序时覆盖列表项)。我将接受你们中的一个答案并投票给另一个,但如果你对过滤有想法/建议,我很乐意听取。