多个嵌套级别的jQuery UI可排序取消选项

时间:2015-07-24 14:37:37

标签: javascript jquery jquery-ui jquery-ui-sortable

我想连接多个嵌套的sortables并定义只有具有某个css类的元素实际上是可排序的,而所有其他元素仍然提供可排序的目标而不能被自己排序。 据我所知,我可以使用cancel选项完成该操作,但我找不到一种方法来指定在所有嵌套级别上有效的选择器,因为此时我不知道级别的数量。 在Mongrel2中,它适用于第二级但不适用于其他级别。例如,在第一级中,禁用的元素仍然是可排序的,在第三级,根本没有任何东西可以排序。

任何有助于做到这一点的提示都非常受欢迎(和赞成)!

谢谢,

桑德罗

2 个答案:

答案 0 :(得分:2)

我认为你可能会因此而复杂化。我认为你实际上不需要知道有多少级别。尝试只在“禁用”元素中添加一个类。然后,您可以将所有内容排序为:

$(function() {
    $( ".sortable" ).sortable({
                    connectWith: ".sortable",
                    cancel: ".notsortable"
    });
});

我更新了您的fiddle,其中包含完整代码:

$(function() {
    $( ".sortable" ).sortable({
    				connectWith: ".sortable",
				    cancel: ".notsortable"
    });
});
.sortable {
    padding-left: 20px;
    border: 1px solid gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div class="sortable">
<div class="notsortable">Item 1 (disabled)</div>
<div>Item 2</div>
<div>Item 3</div>
<div class="notsortable">Item 4 (disabled)</div>
<div class="notsortable">Item 5 (disabled)</div>
<div>Item 6
    <div class="sortable">
        <div class="notsortable">Item 6.1 (disabled)</div>
        <div class="notsortable">Item 6.2 (disabled)</div>
        <div>Item 6.3</div>
        <div>Item 6.4</div>
        <div>Item 6.5</div>
        <div class="sortable">
            <div>Item 6.5.1</div>
            <div>Item 6.5.2</div>
            <div>Item 6.5.3</div>
            <div class="notsortable">Item 6.5.4 (disabled)</div>
            <div class="notsortable">Item 6.5.5 (disabled)</div>
            <div class="sortable">
                <div class="notsortable">Item 6.5.5.1 (disabled)</div>
                <div class="notsortable">Item 6.5.5.2 (disabled)</div>
            </div>
        </div>
    </div>
</div>
<div>Item 7</div>
</div>

更新:由于您无法将类添加到“已禁用”元素,请尝试以下操作:

$(function() {
    $( ".sortable" ).sortable({
                    connectWith: ".sortable",
                    cancel: "div:not(.enabled,.sortable)"
    });
});

更新了小提琴here。我将所有“禁用”元素也用红色着色,并使用相同的选择器进行说明。

答案 1 :(得分:0)

$(function() {
    $( ".sortable" ).sortable({
    				connectWith: ".sortable",
				    cancel: ".notsortable, .prueba",
cursor:move,
    });
});
.sortable {
    padding-left: 20px;
    border: 1px solid gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div class="sortable">
<div class="notsortable">Item 1 (disabled)</div>
<div>Item 2</div>
<div class="prueba">Item 3</div>
<div class="notsortable">Item 4 (disabled)</div>
<div class="notsortable">Item 5 (disabled)</div>
<div>Item 6
    <div class="sortable">
        <div class="notsortable">Item 6.1 (disabled)</div>
        <div class="notsortable">Item 6.2 (disabled)</div>
        <div>Item 6.3</div>
        <div>Item 6.4</div>
        <div>Item 6.5</div>
        <div class="sortable">
            <div>Item 6.5.1</div>
            <div>Item 6.5.2</div>
            <div>Item 6.5.3</div>
            <div class="notsortable">Item 6.5.4 (disabled)</div>
            <div class="notsortable">Item 6.5.5 (disabled)</div>
            <div class="sortable">
                <div class="notsortable">Item 6.5.5.1 (disabled)</div>
                <div class="notsortable">Item 6.5.5.2 (disabled)</div>
            </div>
        </div>
    </div>
</div>
<div>Item 7</div>
</div>