如何以编程方式对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;
});