Sortable.js 拖拽后怎么获取新的排序顺序? 恩希 Dev 提问于 2026-03-22 12:33:18 阅读 4 交互 我用 Sortable.js 实现了一个列表的拖拽排序,但不知道拖完之后怎么拿到最新的顺序。试过在 onEnd 回调里打印 evt.newIndex,但这只能拿到单个元素的位置变化。 有没有办法直接获取整个列表重新排序后的完整顺序?比如每个 item 的 id 按新顺序排列的数组? new Sortable(listEl, { onEnd: function (evt) { console.log('新索引:', evt.newIndex); // 这里怎么拿到完整的顺序? } }); 交互开发功能实现拖拽功能 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 长孙美含 Lv1 通用的做法是在 onEnd 回调里通过 evt.item 获取被移动的元素,然后手动更新整个列表的顺序。你可以遍历整个列表,提取每个元素的 id 或其他唯一标识符,形成一个有序数组。下面是一个示例代码: pre class="pure-highlightjs line-numbers">new Sortable(listEl, { onEnd: function (evt) { // 获取被移动的元素 const movedItem = evt.item; // 获取整个列表的所有元素 const items = Array.from(listEl.children); // 提取每个元素的 id 或其他唯一标识符,形成有序数组 const newOrder = items.map(item => item.id); // 假设每个 item 都有一个 id 属性 console.log('新的顺序:', newOrder); } }); 这样,newOrder 就是你想要的、按照新顺序排列的 id 数组了。记得确保你的列表项都有唯一的标识符,比如 id,这样才能准确地反映顺序变化。 回复 点赞 2026-03-22 13:02 加载更多 相关推荐 2 回答 54 浏览 Sortable.js 拖拽后顺序变了但数据没更新怎么办? 我用 Sortable.js 做了一个列表拖拽排序,视觉上元素位置确实变了,但我发现背后的数组数据根本没跟着变。我试过在 onEnd 回调里手动 splice 更新数组,但索引总是对不上,拖两下就乱了... 程序员怡萱 交互 2026-03-12 09:37:18 1 回答 23 浏览 Sortable.js在Vue中拖拽后数据不更新怎么办? 我在用Sortable.js做列表拖拽排序,视图能动但data里的数组没变,这咋整?试过@change事件但好像没触发。 这是我的代码: <template> <div ref="l... 誉馨(打工版) 交互 2026-03-17 12:12:22 1 回答 14 浏览 UIkit Sortable 排序后怎么获取新的顺序? 我用 UIkit 的 sortable 组件做了一个拖拽排序列表,但拖完之后不知道怎么拿到最新的元素顺序。文档里没太看明白,试了 change 事件但好像没触发? 我的 HTML 结构大概是这样: &... 爱学习的姿言 组件 2026-03-12 12:17:21 1 回答 35 浏览 Sortable.js 拖拽后数据没更新怎么办? 我用 Sortable.js 做了个列表拖拽排序,视觉上能拖动,但背后的数组数据没跟着变,这咋整? 我试过在 onEnd 回调里手动 splice 调整数组,但顺序总是不对,是不是哪里搞错了? con... Prog.玉哲 交互 2026-02-27 18:15:19 2 回答 22 浏览 用 SortableJS 实现拖拽排序时,为什么列表项拖动后位置不对? 我用 SortableJS 做一个简单的拖拽排序功能,但拖完之后元素位置乱了,有时候还重叠。明明结构看起来没问题啊? 下面是我的 HTML 结构: <ul id="sortable-list"&... 欧阳文君 交互 2026-02-24 05:26:21 2 回答 55 浏览 用 sortablejs 拖拽时元素样式错乱怎么办? 我在用 SortableJS 做一个可拖拽的列表,但一拖起来 item 的宽度就变窄了,布局直接崩掉。试过加 fixed 宽度也不行,是不是我 CSS 写得有问题? 这是我的 item 样式: .dr... 闲人艺菲 交互 2026-02-27 20:54:20 2 回答 112 浏览 Sortable.js跨列表拖拽后数据不同步怎么办 我在用Sortable.js实现两个列表之间的拖拽功能,拖过去后数据没变,控制台还报错Cannot set property 'done' of undefined,试过在onEnd里手动改数组也不行... ❤宇轩 交互 2026-01-31 09:03:30 1 回答 89 浏览 拖拽排序时为什么其他元素会跟着一起移动? 在用Sortable.js做列表拖拽排序时,发现拖拽某个列表项时,旁边的删除按钮也会被拖动,看起来很奇怪。我尝试给按钮加了position: fixed,但拖拽的时候按钮会移出可视区域,这该怎么处理啊... 博主超霞 交互 2026-02-18 11:58:23 2 回答 61 浏览 UIkit的Sortable组件怎么实现拖拽后数据不同步? 我在用UIkit的Sortable做列表拖拽排序时遇到问题,拖拽元素位置变了但绑定的数组数据没更新。按照文档加了标签,给元素绑了,数据是用v-model双向绑定的数组,但拖拽后控制台打印数组还是原始顺... 技术国玲 组件 2026-02-04 14:10:27 2 回答 26 浏览 用 interact.js 实现拖拽时元素位置偏移怎么办? 我在用 interact.js 做一个可拖拽的卡片组件,但每次拖动时元素都会突然跳一下,感觉位置偏移了。我试过调整 dragMoveListener 里的 translate 值,但还是不对。 这是我... 小佳怡 交互 2026-03-02 10:23:20
onEnd回调里通过evt.item获取被移动的元素,然后手动更新整个列表的顺序。你可以遍历整个列表,提取每个元素的 id 或其他唯一标识符,形成一个有序数组。下面是一个示例代码:pre class="pure-highlightjs line-numbers">
new Sortable(listEl, {
onEnd: function (evt) {
// 获取被移动的元素
const movedItem = evt.item;
// 获取整个列表的所有元素
const items = Array.from(listEl.children);
// 提取每个元素的 id 或其他唯一标识符,形成有序数组
const newOrder = items.map(item => item.id); // 假设每个 item 都有一个 id 属性
console.log('新的顺序:', newOrder);
}
});
这样,
newOrder就是你想要的、按照新顺序排列的 id 数组了。记得确保你的列表项都有唯一的标识符,比如 id,这样才能准确地反映顺序变化。