【问题标题】:How can I rename a jsTree node如何重命名 jsTree 节点
【发布时间】:2011-06-06 15:58:50
【问题描述】:

我不是在谈论$("#demo1").jstree("rename",node),它使用户可以编辑节点。我说的是在代码中更改的名称。例如,我的节点都以 2 位数字“[01]”为前缀,因此在调用 $("#demo1").jstree("rename",node) 之前,我想去掉前缀,并在用户完成编辑后将其放回原处。我尝试选择“#nodeid a”,但在超链接中有一个 ins 标签,如果我替换 URL 内容,它会被替换。该文档没有帮助,而且我在查看库代码时运气不佳,有什么可以帮助我的吗?克里斯

【问题讨论】:

  • 如何使用正则表达式将数字与单词分开
  • 继续......然后给我一个 jquery 选择器,我看看它是否有效..

标签: javascript jquery jstree


【解决方案1】:

推荐方法是使用rename_node

$("#demo1").jstree('rename_node', node , text );

Please keep in mind 默认情况下对树的所有修改都是 阻止(创建、重命名、移动、删除)。启用它们设置 core.check_callback 为真

$('#demo1').jstree({
    'core': {
        'check_callback': true,
        /// rest of the options...
    }
});

重命名您的节点(替代方法,不推荐)

$("#demo1").jstree('set_text', node , text );

调试

如果还是遇到问题,可以用这个方法获取最后一个错误。

$('#demo1').jstree(true).last_error()

对于旧版本 (v1.*)

$("#demo1").jstree('rename_node', [node , text] ); 
$("#demo1").jstree('set_text', [node , text] ); 

另请参阅:

【讨论】:

  • 根据the docset_text()内部使用,请使用rename_node(obj, val)
  • 正如@jnoreiga 所述:对于'set_text' 方法,我必须将rename_node 语法更改为'$("#demo1").jstree('rename_node', [node ], text); ` 然后它起作用了。
  • dom,你是对的。答案仍然反映了答案时的解决方案(对于版本 1.*)。刚刚将此示例更新为最新版本的 jsTree (v3.*),其中对 check_callback 有一些额外的要求。
  • @Arend 非常感谢..updated ans 帮助了我很多,最后 check_callback 为我工作再次感谢...
  • 您也可以使用id 字符串值代替node 对象作为第一个参数。 (我检查了 v3.3.5)
【解决方案2】:

我认为上述答案中的方括号“[”存在语法错误。我使用 jsTree 3.0.4,这是正确的语法 -

right -    $("#demo1").jstree('set_text',node,text);
wrong -    $("#demo1").jstree('rename_node', [node , text] );    

Example - 
$("#tree_3").jstree('set_text',"#idSelectorForNode" ,"NewName");

【讨论】:

  • 谢谢!!更好 - $("#demo1").jstree('rename_node',node,text); (因为 set_text 是私有方法)
【解决方案3】:

您应该打开开关以允许重命名操作,例如:

$('#container').jstree({
    'core' : {
        'check_callback' : function (operation, node, node_parent, node_position, more) {
            // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'
            // in case of 'rename_node' node_position is filled with the new node name
            return operation === 'rename_node' ? true : false;
        }

});

【讨论】:

    【解决方案4】:

    您可以使用它通过jstree refresh 更新节点文本:

    $("#demo1").jstree(true).rename_node(node , "Renamed_Text");
    

    【讨论】:

    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2011-09-26
    • 1970-01-01
    • 2023-03-31
    • 2012-10-29
    相关资源
    最近更新 更多