在某些情况下不记得 jsTree addClass

jsTree addClass isn't remembered in some instances

使用 jsTree 和拖放插件,我试图说明何时更改了节点的位置。 使用 move_node.jstree 事件,我将 isChanged 的 class 添加到移动的节点,这工作正常。但是,如果我移动的节点是已移动节点的兄弟节点,则先前移动的项目的 isChanged class 会被剥离。

有没有办法在所有移动的节点上保留 isChanged class?

Demo

(移动同一分支上的节点;只有一个具有 isChanged class)

这里是完整的代码:

$('#treeView').jstree({
    "core": {
        "check_callback": true
    },
    "plugins": ["dnd"]
})
.on('move_node.jstree', function (e, data) {
    
    $("#" + data.node.a_attr.id).addClass("isChanged");
    
    console.log(data.node.a_attr.id);
    
});

为了持久化 class 你还需要将它添加到节点的内部 jsTree 表示中,否则重绘节点时 class 将丢失。

.on('move_node.jstree', function (e, data) {
    $("#" + data.node.a_attr.id).addClass("isChanged");
    if(data.node.a_attr.class) {
      if(data.node.a_attr.class.indexOf('isChanged') === -1) {
        data.node.a_attr.class += ' isChanged';
      }
    }
    else {
      data.node.a_attr.class = 'isChanged';
    }   
    console.log(data.node.a_attr.id);
});