javascript - 在可排序更改上更新 javascript 对象中的位置
问题描述
所以我有一个可排序的列表。我想将用户与之交互的列表中的项目的位置保留在对象中。我使用自定义 id 来标识列表中的项目,以及它们被丢弃的位置。问题是,如果我将一个项目拖放到一个位置,然后是之前放置在那里的项目,则以下项目的所有位置都会更改 1 个位置。
async function makeSortable()
{
sortableList = $("#itemlist");
$(sortableList).sortable({
stop: function(event, ui)
{
var order = new Object();
order.id = ui.item.attr("id").substr(3);
order.position = ui.item.index();
console.log(order);
temp['items'].push(order);
}
});
}
我使用对象的原因是因为我想在 beforeunload 事件上将对象作为 json 上传到数据库中(所以在所有列表更改后我需要一个对象)。
例如,我将元素 3,4,5 分别移动到位置 0,1,2 并得到这个对象:
{"items":[{"id":"3","position":0},{"id":"4","position":1},{"id":"5","position":2}]}
现在,如果我将元素 8 拖到位置 1,我会得到:
{"items":[{"id":"3","position":0},{"id":"4","position":1},{"id":"5","position":2},{"id":"8","position":1}]}
根据更新后的列表,我需要 id 为 4 和 5 的元素的位置分别指示位置 2 和 3。所以我的问题是,我如何检测到这种变化?我需要提到的是,我只需要保留用户与之交互的元素的位置。
解决方案
我找到了一种更简单的方法来保存用户与之交互的项目的特定位置。只需序列化订单,将用户拖动的项目保存到数组中,然后比较结果。
async function makeSortable()
{
sortableList = $("#itemlist");
$(sortableList).sortable({
update: function(event, ui)
{
if (temp && !temp.includes(ui.item.attr("id")))
{
temp.push(ui.item.attr("id"));
}
var data = $(this).sortable('serialize');
}
});
}
推荐阅读
- angular - 如何从两个 url 传递参数而不在 url 中显示它们
- java - Spring Cloud Vault 配置文件特定的引导程序
- java - 如果单击是/否,为什么问题没有改变?(安卓工作室)
- go - 将新结构重新分配给变量时,golang会分配新内存吗?
- entity-framework - 一对多 EF .NET Core 关系不起作用
- python - 基于同一个父级多次实例化子类
- php - 如何从 RESTful API 中使用 WooCommerce 从一个 API 调用中获取数据?
- python-3.x - 如何将 fstring 转换为 str.format?
- go - 如何附加到结构内的所有字符串值?
- ruby-on-rails - Rails:通过设计或其他方式对 swagger API 进行身份验证