嵌套jquery ui可排序:如何更新索引?

嵌套jquery ui可排序:如何更新索引?,jquery,jquery-ui,jquery-ui-sortable,Jquery,Jquery Ui,Jquery Ui Sortable,我有一个嵌套的div“列表”,应该使用jQueryUISortable对其重新排序 <div class="sortable"> <div> <span class="sortableIndex">1</span> <div class="sortable"> <div> <span class="sortableIndex

我有一个嵌套的div“列表”,应该使用jQueryUISortable对其重新排序

<div class="sortable">
    <div>
        <span class="sortableIndex">1</span>
        <div class="sortable">
            <div>
                <span class="sortableIndex">1</span>
            </div>
            <div>
                <span class="sortableIndex">2</span>
            </div>
        </div>
    </div>
    <div>
        <span class="sortableIndex">2</span>
        <div class="sortable">
            <div>
                <span class="sortableIndex">1</span>
            </div>
            <div>
                <span class="sortableIndex">2</span>
            </div>
        </div>
    </div>
</div>
现在我想根据拖动div时元素的位置来更新元素中的数字。所以我需要一些方法来选择元素而不选择内部元素。这些元素可能位于其他元素内部,因此它们可能不是被拖动对象的直接子元素

我对JS不是很在行,所以如果有任何帮助,我将不胜感激。

我找到了一个解决方案。 它通过比较最近的.sortable元素与.sortable元素(其中拖动的元素是直接子元素)来工作。如果他们匹配,我可以更新号码。如果它们不匹配,则它们不属于嵌套列表的同一级别

$('.sortable').sortable({
    update: function (event, ui) {
        var self = ui.item;
        var p = self.parent('.sortable');
        var elems = p.find('.sortableindex');

        var order = 1;
        elems.each(function () {
            var elem = $(this);
            var closest = elem.closest('.sortable');
            if (closest[0] == p[0]) {
                elem.text(order);
                order++;
            }
        });
    }
});
$('.sortable').sortable({
    update: function (event, ui) {
        var self = ui.item;
        var p = self.parent('.sortable');
        var elems = p.find('.sortableindex');

        var order = 1;
        elems.each(function () {
            var elem = $(this);
            var closest = elem.closest('.sortable');
            if (closest[0] == p[0]) {
                elem.text(order);
                order++;
            }
        });
    }
});