使用 jquery.ui.sortable 同时对多个项目进行排序

发布于 2024-10-31 11:54:55 字数 122 浏览 5 评论 0原文

有人设法使用 jquery.ui.sortable 同时对多个项目进行排序吗? 我们正在开发一个照片管理应用程序。

  1. 选择多个项目
  2. 将它们拖到新位置。

谢谢

did somebody manage to sort multiple items at once with jquery.ui.sortable?
we are working on a photo managing app.

  1. select multiple items
  2. drag them to a new location.

thanx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

本王不退位尔等都是臣 2024-11-07 11:54:55

我有类似的要求,但接受的答案中的解决方案有一个错误。它说类似“insertBefore of null”,因为它删除了节点。

我还尝试了 jQuery multisortable,它在拖动时将所选项目堆叠在一起,这不是我想要的。

所以我推出了自己的实现,希望它能为其他人节省一些时间。

小提琴链接

源代码:

$( "#sortable" ).sortable({
    // force the cursor position, or the offset might be wrong
    cursorAt: {
        left: 50,
        top: 45
    },
    helper: function (event, item) {
        // make sure at least one item is selected.
        if (!item.hasClass("ui-state-active")) {
            item.addClass("ui-state-active").siblings().removeClass("ui-state-active");
        }

        var $helper = $("<li><ul></ul></li>");
        var $selected = item.parent().children(".ui-state-active");
        var $cloned = $selected.clone();
        $helper.find("ul").append($cloned);

        // hide it, don't remove!
        $selected.hide();

        // save the selected items
        item.data("multi-sortable", $cloned);

        return $helper;
    },

    stop: function (event, ui) {
        // add the cloned ones
        var $cloned = ui.item.data("multi-sortable");
        ui.item.removeData("multi-sortable");

        // append it
        ui.item.after($cloned);

        // remove the hidden ones
        ui.item.siblings(":hidden").remove();

        // remove self, it's duplicated
        ui.item.remove();
    }
});

I had a similar requirement, but the solution in the accepted answer has a bug. It says something like "insertBefore of null", because it removes the nodes.

And also i tried jQuery multisortable, it stacks the selected items on top of each other when dragging, which is not what i want.

So I rolled out my own implementation and hope it will save others some time.

Fiddle Link.

Source code:

$( "#sortable" ).sortable({
    // force the cursor position, or the offset might be wrong
    cursorAt: {
        left: 50,
        top: 45
    },
    helper: function (event, item) {
        // make sure at least one item is selected.
        if (!item.hasClass("ui-state-active")) {
            item.addClass("ui-state-active").siblings().removeClass("ui-state-active");
        }

        var $helper = $("<li><ul></ul></li>");
        var $selected = item.parent().children(".ui-state-active");
        var $cloned = $selected.clone();
        $helper.find("ul").append($cloned);

        // hide it, don't remove!
        $selected.hide();

        // save the selected items
        item.data("multi-sortable", $cloned);

        return $helper;
    },

    stop: function (event, ui) {
        // add the cloned ones
        var $cloned = ui.item.data("multi-sortable");
        ui.item.removeData("multi-sortable");

        // append it
        ui.item.after($cloned);

        // remove the hidden ones
        ui.item.siblings(":hidden").remove();

        // remove self, it's duplicated
        ui.item.remove();
    }
});
老街孤人 2024-11-07 11:54:55

有一个 jQuery UI 插件:https://github.com/shvetsgroup/jquery.multisortable

jsFiddle: http://jsfiddle.net/neochief/KWeMM/

$('ul.sortable').multisortable();

There's a jQuery UI plugin for that: https://github.com/shvetsgroup/jquery.multisortable

jsFiddle: http://jsfiddle.net/neochief/KWeMM/

$('ul.sortable').multisortable();
破晓 2024-11-07 11:54:55

您可以使用 shvetsgroup/jquery.multisortable

但它会产生问题..因为,该 js 仅为

  • 标签设计...

    但是自定义它来使用它,它非常简单,我会告诉你如何???

    首先下载该 .js 并在您的程序中使用它...

    第 1 步.打开 js 文件...现在编辑以下行...

    $.fn.multiselectable.defaults = {
        单击:函数(事件,elem){},
        mousedown: 函数(事件, elem) {},
        selectedClass: '已选择',
        项目:“李”
    };
    

    上面是从107到​​112行....

    在那里你可以看到“items: 'li'

    使用您的标签来封闭这些图像,例如您正在使用的图像,或者您正在使用的任何东西

    $.fn.multiselectable.defaults = {
        单击:函数(事件,elem){},
        mousedown: 函数(事件, elem) {},
        selectedClass: '已选择',
        items: 'div' // 或任何你想要的标签...
    };
    

    以及 249 至 254

    selectedClass: '已选择',
        占位符:'占位符',
        项目:“李”
    };
    

    }(jQuery);

    使用您的标签更改“ item:'li' ”行,如下所示

    selectedClass: '选定',
        占位符:'占位符',
        items: 'div' // 或其他任何内容
    };
    

    }(jQuery);

    如果您正在处理这些信封内的文本框..您也必须删除这些行

     // 如果没有找到先前的选择,则从第一个选定的项目开始选择。
            上一个 = 上一个长度 ?上一个 : $(parent.find('.' + options.selectedClass)[0]).addClass('multiselectable-previous');
            var prevIndex = prev.index();
    

    在该评论行之后...

    添加一行代码来搜索文本框或复选框或其中的任何交互元素...

    像这样..

     // 如果没有找到先前的选择,则从第一个选定的项目开始选择。
    item.children("输入").focus(); // 自定义此代码以获得元素焦点...
            上一个 = 上一个长度 ?上一个 : $(parent.find('.' + options.selectedClass)[0]).addClass('multiselectable-previous');
            var prevIndex = prev.index();
    

    还可以指示选定的标签或元素...使用这样的样式

     div { 边距:2px 0;光标:指针; }
            div.selected { 背景颜色:橙色 }
            div.child { 左边距:20px; }
    

    实际上我使用了 div..而不是你可以使用任何你想要的标签...

    希望能帮助你……如果不是……再读一遍……再问一遍……

    愿望

  • you can use shvetsgroup/jquery.multisortable

    but it will create problem.. because, that js is designed only for

  • tags...

    but customize it to use it, its very simple i'll tell you how????

    at first download that .js and use it in your program...

    step 1. open the js file...now edit the following lines...

    $.fn.multiselectable.defaults = {
        click: function(event, elem) {},
        mousedown: function(event, elem) {},
        selectedClass: 'selected',
        items: 'li'
    };
    

    the above are lines from 107 to 112....

    there you can see "items: 'li'

    in that use your tag which you are used to enclose those image like if you are using, or or anything you are using like this

    $.fn.multiselectable.defaults = {
        click: function(event, elem) {},
        mousedown: function(event, elem) {},
        selectedClass: 'selected',
        items: 'div' // or any tag you want...
    };
    

    and 249 to 254

    selectedClass: 'selected',
        placeholder: 'placeholder',
        items: 'li'
    };
    

    }(jQuery);

    change the line " item:'li' " with your tag like this

    selectedClass: 'selected',
        placeholder: 'placeholder',
        items: 'div'  // or anything else
    };
    

    }(jQuery);

    if you are working on textboxes inside those envelopes.. you have to get rid of these lines too

            // If no previous selection found, start selecting from first selected item.
            prev = prev.length ? prev : $(parent.find('.' + options.selectedClass)[0]).addClass('multiselectable-previous');
            var prevIndex = prev.index();
    

    after that comment line...

    add a line code that search textbox or check box or any interaction element inside it...

    like this..

            // If no previous selection found, start selecting from first selected item.
    item.children("input").focus(); // customize this code to get your element focus...
            prev = prev.length ? prev : $(parent.find('.' + options.selectedClass)[0]).addClass('multiselectable-previous');
            var prevIndex = prev.index();
    

    and also to indicate selected tags or elements... use styles like this

            div { margin: 2px 0; cursor: pointer; }
            div.selected { background-color: orange }
            div.child { margin-left: 20px; }
    

    actually i used div.. instead of that you can use any tag you wish...

    hope will help u.... if it is not... read again.. and ask again....

    wishes

  • 十六岁半 2024-11-07 11:54:55

    ...或者只是以这种方式为您的多排序定义一个“items”选项(例如):

    $('table tbody').multisortable({
      items: 'tr'
    });
    

    ... or just define a 'items' option to your multisortable that way (for example) :

    $('table tbody').multisortable({
      items: 'tr'
    });
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文