如何在可排序列表中排除元素被拖动?

Posted

技术标签:

【中文标题】如何在可排序列表中排除元素被拖动?【英文标题】:How to exclude an element from being dragged in sortable list? 【发布时间】:2012-12-02 20:48:19 【问题描述】:

如何从可排序列表中排除元素?例如,有一个类名为“note”的元素我想要可拖动

    <ul class="sortable">

            <li id="item_3">Item 3</li>
            <li id="item_4">Item 4</li>
            <li id="item_5">Item 5</li>

            <p class="note">This is a note only</p> 
   </ul>

jquery ui 可排序,jquery not 显然不行...

$(function() 
    $( ".sortable:not(.note)" ).sortable(
    ).disableSelection();
);

【问题讨论】:

【参考方案1】:

您需要使用取消。

查看工作示例here。

Js:

$(function() 
    $('.sortable').sortable();
    $('.sortable').disableSelection();
    $('.sortable').sortable( cancel: '.note' );
);​

正如@Zephyr 指出的那样,这让您可以通过拖动兄弟姐妹来重新排列位置,如果您想避免这种情况,请使用owise1 approach:

$('.sortable').sortable(
    items : ':not(.note)'
);

【讨论】:

@lauthiamkok 没问题,我刚刚根据您的具体问题调整了我的答案,所以请查看。 :) 是的,我注意到您编辑了答案。感谢您的编辑! :-D 没问题!很高兴它有帮助! 小心:此解决方案确实会阻止项目可拖动,但仍然可以在其周围移动兄弟可拖动元素。 在我的情况下,仅使用 ":not(.any-class)" 破坏了可排序行为,因为选择器过于笼统并应用于后代 DOM 元素。我使用"&gt; :not(.any-class)" 来解决这个问题,因为items 的默认值是"&gt; *"。 Sortable Widget: items【参考方案2】:

您可以使用 sortable 的“items”选项:

$( ".sortable" ).sortable(
    items : 'li'
);

example

或者...

$( ".sortable" ).sortable(
    items : ':not(.note)'
);

example

【讨论】:

这也适用于包含数据集的&lt;tr&gt; 标签:$("#table").sortable(items: "[data-real-line]");【参考方案3】:

您可以通过以下方式明确排除项目:

$( ".sortable" ).sortable(
     cancel: ".disable-sorting"
);

【讨论】:

以上是关于如何在可排序列表中排除元素被拖动?的主要内容,如果未能解决你的问题,请参考以下文章

不允许在可排序列表中排序,仅使用 connectWith 将它们移动到不同的可排序列表

防止在可排序的 JqueryUI 中删除列表项

使用“克隆”助手执行可拖动事件后,如何删除原始元素?

Jquery ui - 可排序:在可排序元素中按图标“句柄”拖动

jquery 可拖动 + 可在放置事件时使用自定义 html 排序?

jquery - 如何让列表元素可排序并且也可拖动到另一个列表