You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取jQuery UI Sortable中被替换元素的属性?

解决jQuery UI Sortable获取被替换元素属性的问题

我明白你的困扰——用prev()确实有局限性,拖到最顶部时就会拿到undefined,而且这也不一定是你真正想要的「被替换」元素。下面给你两种靠谱的解决方案,根据你的需求选就行:


方案1:处理边界情况,兼容顶部位置

如果你只是想获取拖拽元素新位置的“相邻参照元素”(拖到顶部时取后一个,其他情况取前一个),可以简单判断prev()是否存在,不存在就用next():

<table>
  <tbody>
    <tr id="1"><td>1</td><td>item 1</td></tr>
    <tr id="2"><td>2</td><td>item 2</td></tr>
    <tr id="3"><td>3</td><td>item 3</td></tr>
  </tbody>
</table>

<script>
$("tbody").sortable({
  update:function(ev,ui){
    const draggedId = ui.item.attr("id");
    let replacedId;
    
    // 判断前一个元素是否存在,不存在则取后一个
    if (ui.item.prev().length) {
      replacedId = ui.item.prev().attr("id");
    } else {
      replacedId = ui.item.next().attr("id");
    }
    
    alert(`Moved #${draggedId} to position adjacent to #${replacedId}`);
  }
});
</script>

这个方法简单直接,完美解决了拖到顶部出现undefined的问题。


方案2:精准获取「被交换位置」的元素

如果你想要的是和拖拽元素交换位置的那个元素(比如把item3拖到item1的位置,item1会移到item3原来的位置,此时你想拿到item1的ID),那就需要记录排序前的元素顺序,再对比排序后的位置:

<table>
  <tbody>
    <tr id="1"><td>1</td><td>item 1</td></tr>
    <tr id="2"><td>2</td><td>item 2</td></tr>
    <tr id="3"><td>3</td><td>item 3</td></tr>
  </tbody>
</table>

<script>
let initialOrder; // 存储排序前的元素ID顺序

$("tbody").sortable({
  start: function(ev, ui) {
    // 在拖拽开始时,记录所有元素的ID顺序
    initialOrder = $(this).find("tr").map(function() {
      return $(this).attr("id");
    }).get();
  },
  update: function(ev, ui) {
    const draggedId = ui.item.attr("id");
    const newIndex = ui.item.index(); // 拖拽元素的新位置索引
    const originalIndex = initialOrder.indexOf(draggedId); // 拖拽元素的原始位置索引
    
    // 原始位置现在的元素,就是被交换的元素
    const replacedId = $(this).find("tr").eq(originalIndex).attr("id");
    
    alert(`Moved #${draggedId} from position ${originalIndex+1} to ${newIndex+1}, swapped with #${replacedId}`);
  }
});
</script>

这个方法能精准定位到和拖拽元素交换位置的元素,不管你拖到哪个位置都能正确获取ID。


另外提一下,jQuery UI Sortable的ui对象里还有originalPosition和position属性,也可以用来辅助判断位置变化,但上面两种方法已经足够解决你的问题啦。

内容的提问来源于stack exchange,提问作者Mister Freeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:38