如何以编程方式对jQuery multiselect重新排序?

如何以编程方式对jQuery multiselect重新排序?,jquery,jquery-ui,sorting,multi-select,Jquery,Jquery Ui,Sorting,Multi Select,我用它来设计我的多重选择。两侧都可以拖动,左侧可以排序,这是无法更改的。我想做的是点击一个按钮,让该按钮将我的四个选择(称为a,b,c,d)从右向左移动,按a,d,b,c的顺序显示(并存储在$('#mySelect').val()中) 我可以很容易地让选择移动到左边,但是改变它们的顺序让我很为难。我已经告诉\u moveOptionNode(item)函数回显它的相关内容,但后来我意识到,因为它只接受一个参数,这不是很有用。该函数可以选择性地调用.insertAfter()和.prependTo

我用它来设计我的多重选择。两侧都可以拖动,左侧可以排序,这是无法更改的。我想做的是点击一个按钮,让该按钮将我的四个选择(称为
a,b,c,d
)从右向左移动,按
a,d,b,c
的顺序显示(并存储在
$('#mySelect').val()
中)

我可以很容易地让选择移动到左边,但是改变它们的顺序让我很为难。我已经告诉
\u moveOptionNode(item)
函数回显它的相关内容,但后来我意识到,因为它只接受一个参数,这不是很有用。该函数可以选择性地调用
.insertAfter()
.prependTo()
,但到目前为止,直接调用这些函数也没有给我带来好运

根据过去的经验,我知道
ui.multiselect.js
中所选选项的顺序将随着视觉效果而更新,这对我所做的工作很重要,但我也知道,在当前构建的
ui.multiselect.js
中,我无法首先更新
$('\mySelect').val()的顺序。因此,我显然需要一种方法来模拟拖动一个选项,或者让它以我想要的方式开始排序


我仍在努力,但到目前为止,我还没有取得任何成功,我非常感谢这个社区能提供的任何帮助。

事实证明,实现这一点的方法是操纵HTML元素,而不是影响multiselect ui元素。我用这两行代码完成了它:

$(".selected li:contains('d')", $($('#mySelect').parent()[0])).insertAfter($(".selected li:contains('a')", $($('#mySelect').parent()[0])))

$("#mySelect option[value='d']").insertAfter($("#mySelect option[value='a']"))
当然,这种方法有一个明显的弱点,因为它将移动包含字母d的每个可视元素,并将其复制到包含字母a的每个可视元素之后,但要解决这个问题,只需更改我选择元素的方式。整体方法在这里非常重要,现在我知道了,剩下的就是蛋糕

编辑:这是我的最终代码:

var previtem = null;
var prevvalue = '';
$.each(values, function(i, item) {
    var text = $("#mySelect option[value='"+item+"']").text();
    $('#mySelect').multiselect("select", text);
    $.each($('.selected li:contains('+text+')', $($('#mySelect').parent()[0])), function(i, item) {
        if ($(item).text() == text) {
            // We only move it if it's not the first one in
            // By definition it won't be moved to the start, so this will always work
            if (previtem != null) {
                $(item).insertAfter(previtem);
            }
            previtem = $(item);
        }
    });
    // Again, only move the option if it's not the first one in
    if (prevvalue != '')
        $("#mySelect option[value='"+item+"']").insertAfter($("#mySelect option[value='"+prevvalue+"']"));
    prevvalue = item;
});