【问题标题】:enable/disable sortable depend on group of element启用/禁用可排序取决于元素组
【发布时间】:2014-02-17 09:30:09
【问题描述】:

这是我的代码:

    $(function () {
    $('#sortable tbody').sortable({
        start: function (event, ui) {
            var start_pos = ui.item.index();
            var index2 = $(this).children('tr').index(ui.item);
            var test = $(this).children('tr').eq(index2).children('td:last').text();
            ui.item.data('index2', index2);
            ui.item.data('start_pos', start_pos);
        },
        update: function (event, ui) {
            var index = $(this).children('tr').index(ui.item);
            var start_pos = ui.item.data('start_pos');
            $('#sortable tr:nth-child(' + (index + 1) + ') td:last').html(index);
            if (start_pos < index) {
                //update the items before the re-ordered item
                for (var i = index; i > 0; i--) {
                    $('#sortable tr:nth-child(' + i + ') td:last').html(i - 1);
                }
            }
            else {
                //update the items after the re-ordered item
                for (var i = index + 2; i <= $("#sortable tr").length; i++) {
                    $('#sortable tr:nth-child(' + i + ') td:last').html(i - 1);
                }
            }
        },
        axis: 'y'
    });
    $("#sortable tbody").disableSelection();
});

JsFiddle:http://jsfiddle.net/4mcpq/60/

我想在他的第一个 TD 上启用具有相同值的元素的拖放功能。

例如 1st 可以仅移动到位置 2 而不能移动到其他位置(相同的值:'00')并且只更改其组的最后一个 td。

那么,最终,如何创建具有不同 TR 的链接(取决于她的第一个值 td)?

【问题讨论】:

    标签: javascript jquery drag-and-drop jquery-ui-sortable


    【解决方案1】:

    当您查看文档时:http://jqueryui.com/sortable/#items

    items”选项允许您选择要选择的元素。

    问题是在'start'方法期间,你不能实时修改选项并影响它们。

    因此您可以创建元素“mousedown”事件,它会在拖动之前更改选项。

    看小提琴:http://jsfiddle.net/4mcpq/61/

    感兴趣的代码是:

    $('.ui-state-default').on('mousedown', function(){
        var cellValue = $(this).children().first().html();
        $('#sortable tbody').sortable('option', 'items', "tr:has(td:contains('"+cellValue+"')) ");
    });
    

    评论后更新:

    小提琴http://jsfiddle.net/4mcpq/64/

        update : function(event, ui) {            
            var myvalue = ui.item[0].children[0].outerText;
            var index = $(this).children('tr:has(td:contains('+myvalue+'))').length;
            for(var i=index; i > 0; i--){
                    $('#sortable tr:has(td:first:contains('+myvalue+'))').eq(i-1).find('td').last().html(i - 1);
            }     
        },
    

    【讨论】:

    • 哦,太好了,这正是我想要的!但是正如你所看到的,当我们将第二个元素切换到第一个时,所有的表格都被更新了。可以只更新同一“组”上的最后一个 TD 吗?我认为我们必须改变: var index = $(this).children('tr').index(ui.item); var start_pos = ui.item.data('start_pos');但我不知道如何改变它
    • 我在更新帖子时回答
    • 哼它不起作用。如果我切换位置 3 和 4 我仍然有 -> 0 1 2 3 4 5 6 我想要 0 1 0 1 3 4 5 6 。
    • 完美!我是 Jquery 的新手,非常感谢您的帮助。谢谢
    • 如果你觉得可以,请为我的答案投票^^,++
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多