jstree contextmenu 一次克隆(如复制、粘贴和重命名)

发布于 2024-12-22 16:21:44 字数 407 浏览 2 评论 0原文

我正在开发 jstree 的上下文菜单,显然需要右键菜单中的克隆功能,该功能实际上是复制、粘贴和重命名的模拟,这样一旦用户右键单击一个项目,然后单击克隆,就会复制一个节点(复制并粘贴到树中,并以重命名突出显示为重点,以便用户可以在那里重命名它,

我尝试了下面的代码来自定义克隆菜单项,但它不起作用

cloneItem: { //“克隆”菜单项
标签:“克隆”,
动作:函数(obj)
{
this.copy(obj);
this.paste(obj);
}

非常感谢任何帮助

I am working on contextmenu for jstree, and apparently needed a clone functionality in right click menu which will actually be simulation of copy , paste and rename, so that once user right clicks on an item and then clicks on clone, a node is copied (copied and pasted in the tree , and focused with rename highlight so that user could rename it right there.

I tried code below for custom clone menu item, but it doesn't work

cloneItem: { // The "clone" menu item
label: "Clone",
action: function (obj)
{
this.copy(obj);
this.paste(obj);
}
}

Any help is very much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

慕烟庭风 2024-12-29 16:21:44

经过研究,我弄清楚了如何实现这个克隆,做到这一点的关键是粘贴到复制节点的父节点上。这是代码。

cloneItem: { 
        label: "Clone",             
        action: function (obj) 
        {
            var currentId = this._get_node(obj).attr("id");
            var parentId = this._get_node(obj)[0].firstChild.parentElement.parentNode.parentElement.id;
            $("#TreeDiv").jstree("copy"); 
            $("#TreeDiv").jstree("select_node","#"+parentId);
            $("#TreeDiv").jstree("paste"); 
            $("#TreeDiv").jstree("deselect_node","#"+parentId)
            $("#TreeDiv").jstree("deselect_node", "#"+currentId)
            $("#TreeDiv").jstree("select_node","#copy_"+currentId);
            $("#TreeDiv").jstree("rename");   
        } 

    },

执行此操作的步骤

  • 使用 .jstree("copy"); 复制当前项目;
  • 使用 .jstree("select_node","#"+parentId) 选择复制项的父节点;
  • 使用 .jstree("paste") 粘贴复制的项目(复制到所选项目上,意味着父项目);
  • 现在使用 .jstree("deselect_node","#"+parentId) 和 .jstree("deselect_node", "#"+currentId) 取消选择父元素和复制元素
  • 在重命名选择复制节点之前,复制的项目的 id 为 copy_,所以通过 .jstree("select_node","#copy_"+currentId); 来做到这一点
  • 最后一步是 .jstree("rename");

我希望它能帮助那些需要在 jstree 中克隆的人。

After research I figured out how this clone could be implemented, the key to do this was as paste goes on parent node of copied node. here is code.

cloneItem: { 
        label: "Clone",             
        action: function (obj) 
        {
            var currentId = this._get_node(obj).attr("id");
            var parentId = this._get_node(obj)[0].firstChild.parentElement.parentNode.parentElement.id;
            $("#TreeDiv").jstree("copy"); 
            $("#TreeDiv").jstree("select_node","#"+parentId);
            $("#TreeDiv").jstree("paste"); 
            $("#TreeDiv").jstree("deselect_node","#"+parentId)
            $("#TreeDiv").jstree("deselect_node", "#"+currentId)
            $("#TreeDiv").jstree("select_node","#copy_"+currentId);
            $("#TreeDiv").jstree("rename");   
        } 

    },

steps to do this are

  • copy the current item using .jstree("copy");
  • select the parent node of copied item using .jstree("select_node","#"+parentId);
  • paste the copied item ( its copied over selected item , means parent ) using .jstree("paste");
  • now deselect both parent and copied element using .jstree("deselect_node","#"+parentId) and .jstree("deselect_node", "#"+currentId)
  • Before renaming select the copied node, the copied items gets id as copy_, so do this by .jstree("select_node","#copy_"+currentId);
  • and the final step to do is by .jstree("rename");

I hope it will help someone, who needs clone in jstree.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文