首页
学习
活动
专区
工具
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.2K40

杨老师课堂之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 <div 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查找 // 查找: var div = $('#abc'); 按标签查找 var ps = $('...层级选择器 如果DOM元素有层级关系 层级之间用空格隔开 <li class="...查找子<em>父</em>节点 $('h3').parent().css() //查找h3<em>父</em><em>元素</em> $('h3').sliblings()//所有兄弟节点 $('h3').nextAll()//当前节点后面所有兄弟节点 $...()//查找所有直接子<em>元素</em> $('div').find('li')//所有后代<em>元素</em> 操作DOM 修改Text和HTML <em>jQuery</em>对象的text()和html()方法分别<em>获取</em>节点的文本和<em>原始</em>HTML文本...remove()删除DOM节点 事件 <em>jQuery</em>很多时候需要绑定事件来出发一些东西 on方法用来绑定一<em>个</em>事件 onclick //鼠标单机时触发 onmousemove //当鼠标指针移<em>动到</em><em>元素</em>上时触发

    1.3K40

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

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

    1.9K20

    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

    58220

    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

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

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

    60630

    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]为切片操作。

    49710

    JQuery选择器和JQuery包装集

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

    3.1K20

    数据结构

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

    11710

    一文读懂如何用 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。 代码如下: #!

    979100

    一文读懂如何用 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]为切片操作。

    88970

    一文读懂如何用 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。 代码如下: #!

    78090

    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

    2020最新前端面试题_2020年前端面试题

    所有的 prop 都使得其父子 prop 之间形成了一单向下行绑定: 级 prop 的更新会向下流动到子组件中,但是反过来则不行。...disabled设置的文本框无法获取焦点 3、如果表单的字段是disabled,该字段不会发送(表单传值)和序列化 浏览器 1、浏览器中输入url到网页显示,整个过程发生了什么 域名解析 发起tcp...如果需要渲染多个 HTML 元素必须将它们组合在一封闭标记内,例如、、 等。...如何HTML元素添加到DOM树中的? 可以通过appendTo()方法在指定的DOM元素末尾添加一现存的元素或者一新的HTML元素。 什么是jQuery? jQuer能做什么?...jQuery是一套JavaScript的库,它简化了使用Javascript进行网页特效开发的一些复杂性, 提供了对常见任务的自动化和复杂任务的简化 jQuery的作用 快速获取文档元素 提供漂亮的页面动态效果

    6.7K10
    领券