【发布时间】:2021-04-23 17:26:54
【问题描述】:
我有一个现有的元素数组,例如:
arr=[{name:1,data:xyz},{name:2,data:abc},{name:3, data:lmn}; {name:4,data:opq}]
这些项目是根据它们在 UI 上的名称填充的。
示例:1 2 3 4 5
我已经实现了 jQuery 的 Sortable。在用户对上述元素执行拖放操作后,我希望根据元素的新位置更新现有数组arr,而不是创建新数组。
用户可以移动存在于数组arr 中的元素,并且不能从1 2 3 4 5 元素列表之外引入任何拖动的对象,例如:2 可以移动到 5 或 1 可以移动到 3 等等。
元素 HTML:
<ul class= "tree-list">
<li class="li_class"><span class="span_class"> 1 </span></li>
<li class="li_class"><span class="span_class"> 2 </span></li>
<li class="li_class"><span class="span_class"> 3 </span></li>
<li class="li_class"><span class="span_class"> 4 </span></li>
<li class="li_class"><span class="span_class"> 5 </span></li>
</ul>
jQuery:
$(function() {
var data = $(".tree-list").sortable({
delay: 150,
axis: "y",
update: function(event, ui) {
var index = ui.item.index();
console.log("Moved to new position: " + index);
var children = $('ul.tree-list').children()
// What to do here
})
$( ".tree-list" ).disableSelection();
});
动态创建数组:
someFunc(data){
let htmlString= " <ul class =\"tree-list\" "
for (let i=0; i<data.length; i++){
if(typeof(item) === "string"){
htmlString += "<li class=\" li_class \"" + item + "\">";
}
else if(typeof(item) === "object"){
htmlString += "<li>";
htmlString += "span class=\"span_class\""
}
htmlString += "</li>"
}
}
htmlString += "</ul>";
return (htmlString);
}
【问题讨论】:
-
li和span元素是从数组中创建的吗?如果是这样,您可以通过将对象添加到元素的元数据并简单地使用map()在每次排序操作发生时以正确的顺序重新构建数组来简化逻辑。 -
是的,它们是动态创建的。更新了代码,请看一下。
标签: javascript html jquery jquery-ui jquery-ui-sortable