首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果将JQuery可排序元素从一个父元素移动到另一个父元素,则获取原始父ID

基础概念

jQuery 是一个快速、小巧且功能丰富的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。jQuery 的可排序元素通常是通过 jQuery UI 或其他插件实现的,这些插件允许用户通过拖放等方式重新排列元素的顺序。

相关优势

  1. 简化 DOM 操作:jQuery 提供了一套简洁的 API 来操作 DOM,使得开发者可以轻松地添加、删除或修改页面元素。
  2. 跨浏览器兼容性:jQuery 处理了许多浏览器之间的差异,使得开发者可以编写一次代码,然后在多个浏览器中运行。
  3. 丰富的插件生态系统:jQuery 拥有庞大的插件库,可以轻松地实现各种功能,如可排序列表、日期选择器等。

类型

jQuery 可排序元素的类型主要包括:

  1. 列表排序:如 <ul><ol> 中的 <li> 元素。
  2. 表格排序:如 <table> 中的行或列。
  3. 网格排序:如使用 CSS Grid 布局的元素。

应用场景

  1. 任务管理:用户可以通过拖放重新排列任务的优先级。
  2. 图片或内容管理:用户可以通过拖放重新排列图片或内容的顺序。
  3. 数据分析:用户可以通过拖放重新排列数据列的顺序。

问题及解决方案

问题描述

如果将 jQuery 可排序元素从一个父元素移动到另一个父元素,如何获取原始父元素的 ID?

原因

当元素从一个父元素移动到另一个父元素时,原始父元素的引用可能会丢失,导致无法直接获取其 ID。

解决方案

可以通过在元素上设置自定义数据属性(data-*)来存储原始父元素的 ID,然后在移动元素后读取该属性。

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jQuery Sortable Example</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
    <style>
        .sortable {
            list-style-type: none;
            margin: 0;
            padding: 0;
            width: 60%;
        }
        .sortable li {
            margin: 0 3px 3px 3px;
            padding: 0.4em;
            padding-left: 1.5em;
            font-size: 1.4em;
            height: 18px;
        }
    </style>
</head>
<body>
    <ul id="sortable1" class="sortable">
        <li id="item1" data-parent-id="sortable1">Item 1</li>
        <li id="item2" data-parent-id="sortable1">Item 2</li>
        <li id="item3" data-parent-id="sortable1">Item 3</li>
    </ul>
    <ul id="sortable2" class="sortable"></ul>

    <script>
        $(function() {
            $("#sortable1").sortable({
                connectWith: "#sortable2",
                update: function(event, ui) {
                    var movedItem = ui.item;
                    var originalParentId = movedItem.data("parent-id");
                    console.log("Original Parent ID: " + originalParentId);
                }
            });
            $("#sortable2").sortable({
                connectWith: "#sortable1",
                update: function(event, ui) {
                    var movedItem = ui.item;
                    var originalParentId = movedItem.data("parent-id");
                    console.log("Original Parent ID: " + originalParentId);
                }
            });
            $(".sortable").disableSelection();
        });
    </script>
</body>
</html>

参考链接

通过这种方式,即使元素从一个父元素移动到另一个父元素,也可以轻松获取其原始父元素的 ID。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

scrollIntoView()方法导致整个页面产生偏移

如果不知道 scrollIntoView 如果使用,我有篇文章专门写了 scrollIntoView 的简单使用:scrollIntoView() 让元素进入可视区域 · Issue #167 但是现在有个问题就是...如下图所示,当我点击第9题的时候,左侧第9题移动到视口中,但是整个页面包括导航栏都往上移动了,且无法在移回来,整个页面是没有滚动条的。 ?...这段代码执行后,就可以让该元素到达父元素顶部的位置。 注意事项:offsetTop 不一定是相对于父元素的,如果有很多父元素的话,它是相对于第一个定位的父元素的。...如果第一个父元素未定位(相对relative、绝对absolute或固定fixed),则可能需要将第二行更改为: target.parentNode.scrollTop = target.offsetTop...animate 函数使用方法:https://jquery.cuishifeng.cn/animate.html 如果不使用 jQuery 的话,由于scrollTop 是js属性,不是css属性,

4.3K40
  • 杨老师课堂之Jquery的筛选,事件,效果,Ajax,javascript跨域)

    (1算起) first(),获取第一个元素 last(),获取最后个元素 hasClass(class),检查当前的元素是否含有某个特定的类,如果有,则返回true。...•end 结束选取自己的位置,如果不指定,则就是本身的结尾 1.2 查找 children([expr]),取得一个包含匹配的元素集合中每一个元素的所有子元素的元素集合。...第一个元素是0.如果是负数,则可以从集合的尾部开始选起。 •end 结束选取自己的位置,如果不指定,则就是本身的结尾。...可以在父元素上检测子元素获取焦点的情况。...跨域:在一个服务器上,去访问另一个服务器 jQuery如何实现跨域请求?使用JSONP形式实现跨域。 javascript如果调用另一个域程序,不能执行当前域js函数。

    8.3K20

    一个框架jiejue

    Polymer,Vue,Ember,Knockout和任何CSS库,例如Bootstrap sorablejs demo 网站 一看这解释感觉就是很棒的感觉 特征 支持触摸设备和现代浏览器(包括IE9) 可以从一个列表拖动到另一个列表或在同一列表内...,还是可以从中添加元素的组名数组 revertClone:boolean—在移动到另一个列表后,将克隆的元素恢复到初始位置 dragUlKey() { const ulKey = document.getElementById...3到5可能是不错的值 dragoverBubble 选项 如果设置为true,则拖动事件将冒泡到父可排序对象。适用于后备事件和本机拖动事件。...),以便将拖动元素插入到该可排序对象中。...bubbleScroll 选项 如果设置为true,则普通autoscroll功能还将应用于用户拖动的元素的所有父元素 // html id="content" class="outer

    7.1K10

    jQuery

    jQuery特性 隐式迭代 链式编程,在于一个方法返回的是一个jQuery对象,既然是jQuery对象就可以点出jQuery的方法来 window.onload 资源加载完成时调用 $(function...').css('width', '300px') $('#div1').css('height', 300) 设置多样式$('#div1').css({ //属性可以不加引号 //如果是复合属性则必须采取驼峰命名法...$(this).index() jQuery 选择器 基本选择器 Id选择器 $(‘#btn’) 类选择器 $(‘.tx’) 标签选择器 $(‘li’) 并集选择器 $(‘.hf,...,然后this就是谁,且this是dom对象,使用jquery需要转换为jquery对象 }) mouseover 事件在鼠标移动到选取的元素及其子元素上时触发 mouseenter 事件只在鼠标移动到选取的元素上时触发...$(‘li’).index() 获取li标签在兄弟元素间的索引值 当父类的对象引用没有指向父类的对象,而是指向了子类的对象时,调用方法或访问变量时会怎样呢?

    1.1K20

    jQuery学习笔记

    最近在学习jQuery 不难 只是有些东西容易忘 特此记录之 选择器 按ID查找 // 查找id="abc">: var div = $('#abc'); 按标签查找 var ps = $('...层级选择器 如果DOM元素有层级关系 层级之间用空格隔开 父节点 $('h3').parent().css() //查找h3父元素 $('h3').sliblings()//所有兄弟节点 $('h3').nextAll()//当前节点后面所有兄弟节点 $...()//查找所有直接子元素 $('div').find('li')//所有后代元素 操作DOM 修改Text和HTML jQuery对象的text()和html()方法分别获取节点的文本和原始HTML文本...remove()删除DOM节点 事件 jQuery很多时候需要绑定事件来出发一些东西 on方法用来绑定一个事件 onclick //鼠标单机时触发 onmousemove //当鼠标指针移动到元素上时触发

    1.3K40

    一个简洁、有趣的无限下拉方案

    想象一下,抛开一切,最原始最直接最粗暴的方式无非就是我们再又获取了 10 个新的数据元素之后,再塞 10 个新的 DOM 元素到页面中去来渲染这些数据。...paddingBottom则减去,会有滚动到底部的元素进行替代 newCurrentPaddingBottom = currentPaddingBottom - remPaddingsVal...获取滚动距离,然后: 设置父元素的 translate 来实现整体内容的上移(下移); 再基于这个滚动距离进行相应计算,得知相应子元素已经被滚动到视窗外,并且判断是否应该将这些离开视窗的子元素移动到末尾...相关对比: 实现对比:一个是 Intersection Observer 的监听,来通知子元素离开视窗,只要定量设置父元素 padding 就行;另一个是对传统滚动事件的监听,滚动距离的获取,再进行一系列计算...如果将 Intersection Observer 用到 iScroll 里面去,原有方案可以怎样优化?

    1.9K20

    JavaWeb18-jquery学习笔记(Java全栈开发)

    过滤 eq(index|-index):获取指定索引的元素.如果是正数,索引从0开始;若是负数,倒着数从1开始. first():第一个 last():最后一个 hasClass(...)...[start,end) map(fn):将一组元素转换成其他数组 过滤: eq(index):索引等于 获取指定索引的元素.如果是正数,索引从0开始;若是负数,倒着数从1开始....:从下一个兄弟开始,直到指定元素结束 parent():获取父元素 parents():匹配元素的祖先元素的元素(不包含根元素) prev():上一个兄弟 prevAll():前面的所有兄弟 prevUntil...父元素 $("#two").parent(); parents():先辈 ☆prev():上一个兄弟 例如: $("#two").prev(); prevAll():前面的所有兄弟 prevUntil...可以在父元素上检测子元素获取焦点的情况 blur和focusout 失去焦点 <script type="text/javascript" src="..

    6.8K90

    TypeScript实现二叉堆

    + 1 获取给定节点的右侧子节点位置:2 * index + 2 获取给定节点的父节点位置:(index - 1) / 2 向堆中插入数据 向堆中插入数据(insert)是指将数据插入堆的底部叶节点再执行上移...insert方法接收一个参数:要插入的数据 需要对插入的数据进行非空判断,如果为null则返回false 数据不为空时,往数组(heap)的末尾追加要插入的数据 插入完成后,执行siftUp操作,将数据移动至合适的位置...上移完成后,则成功的向堆中插入了一条数据,返回true 上移操作的实现如下: siftUp方法接收一个参数:插入数据的索引位置(index) 获取当前要插入数据的父节点位置(parent) index...extract函数不接收参数 如果堆为空则返回undefined 如果堆的长度为1,直接返回堆顶元素 否则,声明一个变量保存堆顶元素 执行下移函数调整堆结构 返回刚才保存堆堆顶元素 下移操作的实现: siftDown...函数接收一个参数:需要调整的元素位置(index) 声明一个变量(element)保存index 获取index的左子节点(left)、右子节点(right)、堆的大小(size) 如果heap[element

    59020

    数据结构之堆 → 不要局限于堆排序

    而堆的目的是快速找到最大(小)节点,所以其搜索会很慢 堆操作   有两个原始操作: shiftUp 和 shiftDown 用于保证插入或删除节点后,堆仍然是一个有效的大顶堆或者小顶堆   上移 → shiftUp...,然后用 shiftUp 修复堆;代码如下   peek   获取根元素;如果是大顶堆则是获取最大值,如果是小顶堆,则是获取最小值   indexOf   查找元素的位置索引   因为堆不是为了快速查找而建立的...将最后一个元素移到此位置,当它与子节点比较发现无序使用 shiftDown ,如果与父节点比较发现无序则使用 shiftUp   replace   将指定位置的元素替换成目标元素;当它与子节点比较发现无序使用... shiftDown ,如果与父节点比较发现无序则使用 shiftUp   buildHeap   构建初始堆,循环调用 insert 即可 使用场景   堆排序   这个可以说是大家最容易想到的堆的使用场景... shiftDown ,其他操作都是基于这两个操作   使用场景   堆排序   优先队列   获取极值

    61930

    E025Web学习笔记-JQuery(三):DOM操作

    /设置元素的属性; 2、removeAttr():删除属性; 3、prop():获取/设置元素的属性; 4、removeProp():删除属性; attr与prop的区别: 1、如果操作的是元素的固有属性...,则建议使用prop; 2、如果操作的是元素的自定义的属性,则建议使用attr; 对class属性操作: 1、addClass():添加class属性值; 2、removeClass():删除class...toggleClass("c3"); document.write($(".c3").text()); 运行结果: 三、CRUD操作 1、append():父元素将子元素追加到末尾...; -- 对象1.append(对象2):将对象2添加到对象1元素内部,并且在末尾; 2、prepend:父元素将子元素追加到开头; -- 对象1.append(对象2):将对象2添加到对象1元素内部,...并且在开头; 3、appendTo(): -- 对象1.appendTo(对象2):将对象1添加到对象2内部,并且在末尾; 4、prependTo:父元素将子元素追加到开头; -- 对象1.appendTo

    6310

    JQuery选择器和JQuery包装集

    而在JQUERY中则完全不同,JQUERY提供了异常强大的选择器用来帮助我们获取页面上的对象,并且将对象以JQUERY包装集的形式返回。 "$"符号在JQUERY中代表对JQUERY框架集的引用。...().is("form")用一个表达式来检查当前选择的元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true $("p").parent()查找每个段落的父元素: 示例 HTML 代码:将一个数组转换为另一个数组 将原数组中每个元素加 4 转换为一个新数组:$.map( [0,1,2], function(n){ return n + 4;}...第一个元素是0.如果是负数,则可以从集合的尾部开始选起。 第二个参数:结束选取自己的位置,如果不指定,则就是本身的结尾。...(htm|element|fnl)将每一个匹配的元素的子内容(包括文本节点)用一个HTML结构包裹起来,举例如上,将全部字符加粗;

    3.1K20

    一文读懂如何用 Python 实现6种排序算法

    总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。...具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元素的子项,一个元素就是已经排好序的了。然后将这些有序的子元素进行合并。...上移,下移 : 当某节点的键值大于它的父节点时,这时我们就要进行“上移”操作,即我们把该节点移动到它的父节点的位置,而让它的父节点到它的位置上,然后我们继续判断该节点,直到该节点不再大于它的父节点为止才停止...对于划分partition 每一轮迭代的开始,x=A[r], 对于任何数组下标k,有: 1) 如果p≤k≤i,则A[k]≤x。 2) 如果i+1≤k≤j-1,则A[k]>x。...3) 如果k=r,则A[k]=x。 代码如下: #!

    78390

    数据结构

    申请一个节点大小的内存空间 2.判断L是否为NULL,内存够不够 3.将头节点的下一个节点地址域指向空 4.如果申请成功,返回true 在第i个位置插入元素e bool ListInsert(LinkList...NULL,则返回0,因为空树的高度为0 return 0; } //if T == NULL 一个是判断这棵树是否为空树,另一个是当递归到叶子节点时,可以返回0+1=1 else {...,若大于父节点则交换,直到无法上移为止, 下滤 将破坏堆序性的元素跟他的最大的子节点比较,如果小于他的最大子节点,则交换 持续比较,直到该元素大于他的子节点位置,或者移动到底部为止 总之,上滤是和父节点比较...,下滤是和子节点比较,只能父子之间交换 建堆 自顶向下建堆法 将元素一个一个插入到堆内,将新元素放到堆的最后一位,然后对其进行上滤操作 取最值调整 在大根堆中,如果父节点比两个子节点都要小,...则选最大的往上走 在小根堆中,如果父节点比两个子节点都要大,则选最小的往上走 排序顺序:从最后一个父节点开始往上找

    11910

    一文读懂如何用 Python 实现6种排序算法

    总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。...具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元素的子项,一个元素就是已经排好序的了。然后将这些有序的子元素进行合并。...上移,下移 : 当某节点的键值大于它的父节点时,这时我们就要进行“上移”操作,即我们把该节点移动到它的父节点的位置,而让它的父节点到它的位置上,然后我们继续判断该节点,直到该节点不再大于它的父节点为止才停止...对于划分partition 每一轮迭代的开始,x=A[r], 对于任何数组下标k,有: 1) 如果p≤k≤i,则A[k]≤x。 2) 如果i+1≤k≤j-1,则A[k]>x。...3) 如果k=r,则A[k]=x。 代码如下: #!

    983100

    python 实现各种排序算法

    归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。...具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元素的子项,一个元素就是已经排好序的了。然后将这些有序的子元素进行合并。...上移,下移 : 当某节点的键值大于它的父节点时,这时我们就要进行“上移”操作,即我们把该节点移动到它的父节点的位置, 而让它的父节点到它的位置上,然后我们继续判断该节点,直到该节点不再大于它的父节点为止才停止...对于划分partition 每一轮迭代的开始,x=A[r], 对于任何数组下标k,有: 如果p≤k≤i,则A[k]≤x。 如果i+1≤k≤j-1,则A[k]>x。 如果k=r,则A[k]=x。...切片操作符让我们能够获取序列的一个切片,即一部分序列,如:a = ['aa','bb','cc'], print a[0] 为索引操作,print a[0:2]为切片操作。

    50010

    一文读懂如何用 Python 实现6种排序算法

    分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元素的子项,一个元素就是已经排好序的了。然后将这些有序的子元素进行合并。...上移,下移 : 当某节点的键值大于它的父节点时,这时我们就要进行“上移”操作,即我们把该节点移动到它的父节点的位置,而让它的父节点到它的位置上,然后我们继续判断该节点,直到该节点不再大于它的父节点为止才停止...对于划分partition 每一轮迭代的开始,x=A[r], 对于任何数组下标k,有: 1) 如果p≤k≤i,则A[k]≤x。 2) 如果i+1≤k≤j-1,则A[k]>x。...3) 如果k=r,则A[k]=x。 代码如下: #!...切片操作符让我们能够获取序列的一个切片,即一部分序列,如:a = [‘aa’,’bb’,’cc’], print a[0] 为索引操作,print a[0:2]为切片操作。

    89170

    Web前端JQuery面试题(二)

    通过jquery自身的方法获取页面元素的对象,就是jquery对象。...基本选择器: #id 根据给定的id进行匹配一个元素 element 根据给定的元素名进行匹配所有元素 .class 根据给定的类匹配该类的所有元素 * 匹配所有元素 selector1,selector2...:first-child 匹配每个父元素下的第一个子元素 :last-child 匹配每个父元素下的最后一个子元素 :only-child 匹配父元素中只有唯一的子元素,如果父元素中有多个子元素,就不会被匹配...($div); append(function (index,html)) 同上 appendTo: 把选择的元素追加到另一个指定的元素中 appendTo(content)将一个元素插入另一个指定的元素中...): 向所选择的元素外部前面插入内容 before(function) insertAfter(content) 选择的元素插入另一个元素外部后面 insertBefore(content) 选择元素插入另一个元素外部前面

    1.9K30

    深入浅出分析MySQL索引设计背后的数据结构

    即:父结点中任何关键字的左孩子都小于它,右孩子大于它。 2、B-Tree插入操作 1)插入新元素,如果叶子结点空间足够,则插入其中,遵循从小到大排序;2)如果该结点空间满了,进行分裂。...,所以这时对父结点进行分裂,将中间关键字13上移形成新的父结点,其他按照50%分裂成4,7和17,20两个结点,到此,数据插入全部完成,形成了一棵B-Tree。...2)删除该元素后,判断该元素是否有左右孩子结点,如果有,则上移孩子结点中的相近元素到父节点中(相近元素指的是:刚被删除元素的相邻后继元素,比如删除D,相近元素就是F等) 3)然后接着判断:如果结点中元素个数小于...ceil(m/2)-1,首先找其相邻兄弟结点元素是否足够(结点中元素个数大于ceil(m/2)-1),如果足够,向父节点借一个元素,同时将借的元素的孩子结点中相邻后继元素上移到父结点中; 如果其相邻兄弟都不够...如果叶子结点空间满了,判断父结点空间是否足够,如果足够,将该新元素插入到父结点中;如果父结点空间满了,则进行分裂。

    45520
    领券