如何将节点从 div 拖放到 JStree 上? (jstree版本:3.0.4)

2023-12-04

使用以下代码,我可以将 JSTree 节点拖放到 div 上,然后该节点将从 jstree 中删除。 我将所有删除的 jstree 节点存储在 mapOfRemovedNodes 对象中,其中节点 id 是 KEY,节点对象本身是 VALUE。 现在,我想将节点移回 JSTree。 这是我的完整代码:

<!doctype html> 
<head>
    <title>JSTree</title>
    <link rel="stylesheet" href="css/style.css" />
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <script src="js/jquery.js"></script>
    <script src="js/jstree.js"></script>
    <script>
        var mapOfRemovedNodes = new Object();
        $(function() {
            var arrayCollection = [
                {"id": "animal", "parent": "#", "text": "Animals"},
                {"id": "device", "parent": "#", "text": "Devices"},
                {"id": "dog", "parent": "animal", "text": "Dogs", "icon": "fa fa-file-o"},
                {"id": "lion", "parent": "animal", "text": "Lions", "icon": "fa fa-file-o"},
                {"id": "mobile", "parent": "device", "text": "Mobile Phones", "icon": "fa fa-file-o"},
                {"id": "lappy", "parent": "device", "text": "Laptops", "icon": "fa fa-file-o"},
                {"id": "daburman", "parent": "dog", "text": "Dabur Man", "icon": "fa fa-long-arrow-right"},
                {"id": "Dalmation", "parent": "dog", "text": "Dalmatian", "icon": "fa fa-long-arrow-right"},
                {"id": "african", "parent": "lion", "text": "African Lion", "icon": "fa fa-long-arrow-right"},
                {"id": "indian", "parent": "lion", "text": "Indian Lion", "icon": "fa fa-long-arrow-right"},
                {"id": "apple", "parent": "mobile", "text": "Apple IPhone 6", "icon": "fa fa-long-arrow-right"},
                {"id": "samsung", "parent": "mobile", "text": "Samsung Note II", "icon": "fa fa-long-arrow-right"},
                {"id": "lenevo", "parent": "lappy", "text": "Lenevo", "icon": "fa fa-long-arrow-right"},
                {"id": "hp", "parent": "lappy", "text": "HP", "icon": "fa fa-long-arrow-right"}
            ];
            $('#jstree').jstree({
                "plugins": ["dnd", "types"],
                'core': {
                    'check_callback': true,
                    'data': arrayCollection,
                    'themes': {
                        'dots': false
                    }
                },
                "types": {
                    "root": {
                        "icon": "/static/3.0.8/assets/images/tree_icon.png",
                        "valid_children": ["default"]
                    },
                    "default": {
                        "valid_children": ["default", "file"]
                    },
                    "file": {
                        "icon": "fa fa-file-o",
                        "valid_children": []
                    }
                }
            });
            $(document).on('dnd_start.vakata', function(e, data) {
                console.log('Started dragging node from jstree');
            });
            $(document).on('dnd_move.vakata', function(e, data) {
                console.log('Moving node from jstree to div');
            });
            $(document).on('dnd_stop.vakata', function(e, data) {
                console.log('Dropped the node on to the div');
                if (data.event.target.id === 'dragTarget') {
                    var nodeDragged = $(data.element).clone();
                    $('#dragTarget').append(nodeDragged);
                    var ref = $('#jstree').jstree(true);
                    var nodeToDelete = $('#' + data.data.nodes[0]);
                    mapOfRemovedNodes[data.data.nodes[0]] = nodeToDelete.clone(); // including the clone of the node in a map
                    ref.delete_node(nodeToDelete); // deleting the node on jstree after dropping it on to the div
                    console.log(getRemovedNode(data.data.nodes[0]));
                }
            });
        });

        function getRemovedNode(key) {
            return mapOfRemovedNodes[key];
        }


    </script>
</head>
<body>
    <div id="jstree" style="float: left; width: 500px"></div>
    <div id="dragTarget" style="float: left; width: 750px; height: 750px; background-color: skyblue; text-align: center">
        <h3>Dropped Items</h3>
    </div>
    <script>
        document.getElementById('dragTarget').addEventListener('dragstart', function(evt) {
            console.log("The 'dragstart' event fired.");
            console.log(evt.target);
            evt.dataTransfer.setData('text', evt.target.textContent);
        }, false);

        document.addEventListener("dragover", function(evt) {
            console.log("The 'dragover' event fired.");
            evt.preventDefault(); // Prevent the default behavior in order to enable dropping.
        }, false);

        document.getElementById('jstree').addEventListener("drop", function(evt) {
            console.log("The 'drop' event on jsTree fired.");
            evt.preventDefault(); // Prevent the default action to open as link for some elements. 
            console.log(evt);
            //
            // To do: How to drop the node (dragged from div) to jstree structure??
            //
        }, false);
    </script>
</body>
</html>

假设我必须从 div 中拖动一个节点并将其放在 jstree 上的任意位置。 在这里,我如何将节点从 div 移动到 jstree 并将其放置在正确的层次结构中,正好位于其父节点下方?


找到解决方案了!!发布我的答案,因为这可能对面临类似问题的其他人有用。

<!doctype html> 
<head>
    <title>JSTree</title>
    <link rel="stylesheet" href="css/style_jstree.css" />
    <link href="fonts/font-awesome-4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <script src="js/jquery.js"></script>
    <script src="js/jstree.js"></script>
    <script>
        var arrayCollection;
        $(function() {
            arrayCollection = [
                {"id": "animal", "parent": "#", "text": "Animals", "data": {"name": "Quick"}},
                {"id": "device", "parent": "#", "text": "Devices"},
                {"id": "dog", "parent": "animal", "text": "Dogs", "icon": "fa fa-file-o"},
                {"id": "lion", "parent": "animal", "text": "Lions", "icon": "fa fa-file-o"},
                {"id": "mobile", "parent": "device", "text": "Mobile Phones", "icon": "fa fa-file-o"},
                {"id": "lappy", "parent": "device", "text": "Laptops", "icon": "fa fa-file-o"},
                {"id": "daburman", "parent": "dog", "text": "Dabur Man", "icon": "fa fa-long-arrow-right"},
                {"id": "Dalmation", "parent": "dog", "text": "Dalmatian", "icon": "fa fa-long-arrow-right"},
                {"id": "african", "parent": "lion", "text": "African Lion", "icon": "fa fa-long-arrow-right"},
                {"id": "indian", "parent": "lion", "text": "Indian Lion", "icon": "fa fa-long-arrow-right", "data": {"lastName": "Silver"}},
                {"id": "apple", "parent": "mobile", "text": "Apple IPhone 6", "icon": "fa fa-long-arrow-right"},
                {"id": "samsung", "parent": "mobile", "text": "Samsung Note II", "icon": "fa fa-long-arrow-right"},
                {"id": "lenevo", "parent": "lappy", "text": "Lenevo", "icon": "fa fa-long-arrow-right"},
                {"id": "hp", "parent": "lappy", "text": "HP", "icon": "fa fa-long-arrow-right"}
            ];
            $('#jstree').jstree({
                "plugins": ["dnd", "types"],
                'core': {
                    'check_callback': true,
                    'data': arrayCollection,
                    'themes': {
                        'dots': false,
                        'responsive': true
                    }
                },
                "types": {
                    "root": {
                        "icon": "/static/3.0.8/assets/images/tree_icon.png",
                        "valid_children": ["default"]
                    },
                    "default": {
                        "valid_children": ["default", "file"]
                    },
                    "file": {
                        "icon": "fa fa-file-o",
                        "valid_children": []
                    }
                }
            });
            $(document).on('dnd_start.vakata', function(e, data) {
                //console.log('Started dragging node from jstree');
            });
            $(document).on('dnd_move.vakata', function(e, data) {
                //console.log('Moving node from jstree to div');
            });
            $(document).on('dnd_stop.vakata', function(e, data) {
                if (data.event.target.id === 'dragTarget') {

                    var jsonElement;

                    var nodeDragged = $(data.element).clone();
                    // $('#dragTarget').append(nodeDragged);
                    if (data.data.jstree && data.data.origin)
                    {
                        jsonElement = data.data.origin.get_node(data.element);

                        var id = jsonElement.id;
                        var icon = jsonElement.icon;
                        var parent = jsonElement.parent;
                        var parents = jsonElement.parents.join();
                        var text = jsonElement.text;

                        var divElement = '<div data-id=\'' + id + '\' data-text=\'' + text + '\' data-icon=\'' + icon + '\' data-parent=\'' + parent + '\' draggable=true><i class=\'' + icon + '\'></i>&nbsp' + text + '</div>';
                        $('#dragTarget').append(divElement);

                        arrayCollection = arrayCollection
                                .filter(function(el) {
                                    return el.id !== id;
                                });

                        resfreshJSTree();

                    }

                }
            });
        });

        function resfreshJSTree() {
            $('#jstree').jstree(true).settings.core.data = arrayCollection;
            $('#jstree').jstree(true).refresh();
        }


    </script>
</head>
<body>
    <div id="jstree" style="float: left; width: 500px"></div>
    <div id="dragTarget" style="float: left; width: 750px; height: 750px; background-color: skyblue; text-align: center">
        <h3>Dropped Items</h3>
    </div>
    <script>

        var draggedDivElement;

        document.getElementById('dragTarget').addEventListener('dragstart', function(evt) {
            console.log("The 'dragstart' event fired.");
            var jsonElement = new Object();
            var divElement = evt.target;
            jsonElement.id = divElement.getAttribute('data-id');
            jsonElement.text = divElement.getAttribute('data-text');
            jsonElement.icon = divElement.getAttribute('data-icon');
            jsonElement.parent = divElement.getAttribute('data-parent');
            evt.dataTransfer.setData('jsonElement', JSON.stringify(jsonElement));
            draggedDivElement = divElement;
        }, false);

        document.addEventListener("dragover", function(evt) {
            console.log("The 'dragover' event fired.");
            evt.preventDefault(); // Prevent the default behavior in order to enable dropping.
        }, false);

        document.getElementById('jstree').addEventListener("drop", function(evt) {
            console.log("The 'drop' event on jsTree fired.");
            evt.preventDefault(); // Prevent the default action to open as link for some elements. 
            arrayCollection.push(JSON.parse(evt.dataTransfer.getData('jsonElement')));
            resfreshJSTree();
            if(draggedDivElement!==null){
                draggedDivElement.innerHTML = '';
            }            
        }, false);

    </script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将节点从 div 拖放到 JStree 上? (jstree版本:3.0.4) 的相关文章

  • 如何使用 file:///F:/foldername 访问 ajax 中的本地文件夹?但它适用于 http://

    在这里 我使用以下代码使用 AJAX jQuery 动态创建文件名列表 window load function var fileExt csv document ready function ajax url file F foldern
  • 移动设备上的剩余悬停效果

    我一整天都在努力做这个JSFiddle http jsfiddle net gsamaras q2w4jjyt 4 也适用于手机 但我所有的尝试都没有效果 在桌面上 当用户将鼠标悬停在箭头上时 它会变成红色 在移动设备上 当用户触摸 为了单
  • innerText 和 html 之间的区别

    有什么区别innerText text and html innerText or text http docs jquery com Attributes text如果您使用的是 jQuery 不包含任何 HTML 标签 因此 如果您有一
  • Disqus:使用 jQuery 成功后更改标题

    Disqus 根据请求自动放置定义的标题 例如 添加新评论 我尝试在ready 上使用jquery更改它的值 dsq new post h3 text Paticipa con tu cuenta favorita 没有成功 我如何知道 d
  • jQuery/JavaScript“this”指针混淆

    当函数时 this 的行为bar被称为让我困惑 请参阅下面的代码 当从单击处理程序调用 bar 时 有什么方法可以将 this 安排为普通的旧 js 对象实例 而不是 html 元素 a class with a method functi
  • xhr 响应 for 循环不起作用

    我有 xhr 和 for 循环 它的工作非常罕见 for var i 0 i lt this files length i var xhr new XMLHttpRequest xhr upload onprogress function
  • ajax调用后如何停止刷新页面?

    ajax 调用后我无法停止刷新页面 我尝试过放置 e preventDefault 并返回 false 但我的页面又刷新了 我不知道代码有什么问题或者什么 请帮助我在ajax调用后停止刷新页面 解决这个问题对我来说会有很大的帮助 提前致谢
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • jQuery mCustomScrollbar 不适用于 ajax 内容

    window load function content 1 mCustomScrollbar scrollButtons enable true ajax code function beauty of ceylon content te
  • javascript/jquery 从选择中删除或删除选项

    在某些情况下 我需要从选择中删除选项 基本上 if mystatement true remove item with id option1 from select of id select1 有人知道我可以实现这一目标的代码吗 非常感谢
  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • Jquery 和 Django 多个复选框

    我是 jquery 的初学者 所以请耐心等待 我有一个 jquery 函数 允许我选择多个复选框并创建一个字符串 如下所示 function getSelectedVals var tmp input name checks each fu
  • 如何居中对齐数据表标题

    我是数据表新手 当我制作表格标题时 它总是左对齐 如何将标题设置为居中对齐 我已阅读 datatables net manual styling classes 和 datatables net reference option colum
  • jQuery 日期格式

    如何使用 jQuery 设置日期格式 我正在使用下面的代码但出现错误 txtDate val format date new Date dd M yy 请提出解决方案 在您的页面中添加 jquery ui 插件 txtDate val da
  • iphone jquery 移动闪烁问题

    我在 iPhone 上使用使用 jQuery mobile 开发的应用程序时遇到闪烁问题 我尝试了互联网上提供的几种解决方案 包括 CSS 更改 将过渡设置为 无 甚至在 jquerymobile js 中注释代码 但没有运气 我使用的 J
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • 如何知道 .keyup() 是否是字符键(jQuery)

    如何知道 keyup 是否是字符键 jQuery input keyup function if key is a character such as a b A b c 5 3 2 etc not enter key or shift o
  • 如何从 html 页面 [javascript] 调用 Web 服务方法而不刷新页面

    我有一个webservice这将返回一个值 我的要求是 我需要调用它webservice从一个index html页面 该页面有一个 html 提交按钮 在该按钮上单击我正在呼叫JavaScript 从那里我想调用网络方法 我怎样才能做到这
  • 禁用复选框上的输入

    需要在取消选中该复选框时禁用输入 并在选中该复选框时启用它 我的代码是这样的 div class y div
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h

随机推荐

  • 在 C 中使用具有相同标志的 fopen 打开文件

    我无法理解这段代码的输出 int main FILE f f1 f fopen mytext w if f1 fopen mytext w 0 printf unable n fprintf f hello n fprintf f1 hi
  • Android TimePicker 在横向模式下显示不佳

    我目前正在构建一个针对 API 23 的应用程序 最低 API 16 我遇到一个问题 TimePicker 显示在 AlertDialog 中 在 Nexus 5 API 在 Nexus 5 API 23 纵向 上 纵向模式下的时间选择器
  • 何时清除 Android 中的缓存目录?

    我有一个显示来自互联网的图片的应用程序 展示设计师的作品 我开始在内部缓存目录中缓存我的内容 但应用程序内容可能需要大约 150 MB 的缓存大小 Android 文档说的是 您应该始终自己维护缓存文件并保持在 合理限制消耗的空间 例如 1
  • jboss Resteasy 使用 @Context 进行参数注入

    我正在使用 jboss 7 1 和 Resteasy 进行基于令牌的身份验证 我使用 PreProcessInterceptor 来拦截请求 获取令牌 从令牌检索用户 然后根据方法上的自定义注释检查用户角色 我现在想做的是将 User 注入
  • 使用 html5 canvas 将图像裁剪为非矩形形状并进行转换

    我是 html5 canvas 的新手 但我正在创建一个基于 html5 canvas 的图像裁剪器 其中包括下一个功能 它应该将图像裁剪为多边形 但不一定是矩形 裁剪图像后 应将图像转换为矩形 我尝试搜索任何满足这些功能的图像裁剪器 但没
  • jquery 中可调整大小、可拖动的对象。可能的?

    我想要一个既可以调整大小又可以拖动的对象 我需要 X Y Size 的对象 这可能吗 有一个例子http www jsfiddle net davidThomas DGbT3 1 它获取可拖动对象的 x 和 y 我怎样才能让它调整大小 Th
  • 如何保留历史 RDD 以供在给定代码中进一步使用

    var history RDD String List String sc emptyRDD val dstream1 val dstream2 val historyDStream dstream1 transform rdd gt rd
  • Android:具有不同 alpha 值的嵌套线性布局

    我有一个矩形 LinearLayout 它有一些边距 一些圆角和 0 3 的 alpha 值 在这个布局中 我有 4 种不同的布局 因为我在不同的位置显示不同的图像 我的问题是 虽然主布局是 0 3 但我希望我的孩子完全可见 或者不受其父
  • Python - 通过 Firefox 的 Tor 浏览器,无法单击按钮

    我一直在尝试通过 Tor 浏览器作为 Firefox 的代理来访问某个站点 dumpert nl 我使用 Tor 浏览器的原因是这样我每次进入网站时都可以使用不同的 IP 地址进入该网站 我知道这是可能的 但我还没有找到方法来做到这一点 我
  • 通过 RequestCultureProviders 处理路由 (URL) 中的文化

    我想创建一个适当的 requestCultureProviders 来使用以下路由模板处理 AspNetCore WebApp 中的路由文化 http url domain culture controller action 例子 http
  • 带对话框的自定义标记

    我如何实现如上所示的对话框 到目前为止 这就是我现在能做的 map addLayer id markers type symbol source markers interactive true layout text field pric
  • 刷新 chrome 页面时用户变为 null flutter web firebase

    我可以在网络中使用 Firebase Auth 正确登录和注册 当我热重新加载页面时 用户信息将保持不变并且他们保持登录状态 但是 如果我使用 Chrome 刷新页面 用户将变为空 我需要再次登录 认证服务 static Future
  • 在ios中运行一个简单的python脚本

    我想在 ios 上运行 python 脚本 我不想用 Python 编写整个应用程序 而只编写其中的一小部分 我试图理解 PyObjC 但它并不那么容易 请给我举个例子好吗 我想将以下方法的结果保存在NSString多变的 def doSo
  • Android 12 新蓝牙权限

    蓝牙是我们应用程序的主要依赖项 因此 我们已经尝试实现新的 Android 12 蓝牙权限 我们唯一的资源是Android 开发人员 Android 12 中的新蓝牙权限 就是说添加权限 android permission BLUETOO
  • 为什么我会收到 Android : 目标服务器未能响应?

    API链接 http www familybuds com storegrunt new api home validate step one platform 1 发布参数 store name abc 代码位于 GoDaddy 服务器上
  • 在 Rails 中使用 collection_check_boxes 填充表单时传递额外的属性到连接表?

    填充表单时是否可以添加额外的属性来连接表collection check boxes在 Rails 中还是我必须以不同的方式填充表单 目前我有 Product Package 和 PackageItem 模型 包包含许多产品 但也可以在包中
  • 带渐变的 SVG 路径

    目前 我有一个脚本 通过 GIMP 中的 py 插件 可以生成一个带有渐变的 SVG 路径 通过具有不同宽度和颜色的同一路径的多个路径来模拟 但是 我想知道是否有一种语法可以生成类似的内容 而无需定义多个路径 就像定义一个渐变和单一路径一样
  • 如何设置 TFS 2013 构建定义以从 Git 标签构建?

    我想在 TFS 2013 中创建一个特殊的构建定义以从标签构建 该项目中使用的源代码管理是 Git 所以 假设我有一个名为v1 0 我希望此构建定义提取与该标签对应的源并运行构建 触发器现在并不重要 甚至可以是手动的 这怎么可能 我可以看到
  • matplotlib 带有更改标签的 3D 绘图

    所以我有一个 3D 实时更新图 它一次只显示一个点 因此我可以轻松跟踪该点的运动 但问题是 无论我做什么 该点总是放置在图表的中心 并且轴上的刻度线会发生变化以实现这一点 这让我的生活变得非常困难 因为我看不到这一点 这是我的代码 from
  • 如何将节点从 div 拖放到 JStree 上? (jstree版本:3.0.4)

    使用以下代码 我可以将 JSTree 节点拖放到 div 上 然后该节点将从 jstree 中删除 我将所有删除的 jstree 节点存储在 mapOfRemovedNodes 对象中 其中节点 id 是 KEY 节点对象本身是 VALUE