Javascript 加载json_数据后是否更改jsTree节点css类?

Javascript 加载json_数据后是否更改jsTree节点css类?,javascript,jquery,jstree,Javascript,Jquery,Jstree,每当用户单击文件夹旁边的[+]时,我就通过json_数据加载我的jsTree。我想做的是将css类应用于一些节点,以便为用户突出显示它们。这里不讨论鼠标悬停或当前选定的节点,而是多个节点,有些人必须稍后查看。服务器的JSON响应中已经存在相应的css类: [ {"attr":{"id":"node_5","rel":"document","page_id":"4"},"data":"Test123","csscl":"ui-state-error","state":""}, {"attr":{"

每当用户单击文件夹旁边的[+]时,我就通过json_数据加载我的jsTree。我想做的是将css类应用于一些节点,以便为用户突出显示它们。这里不讨论鼠标悬停或当前选定的节点,而是多个节点,有些人必须稍后查看。服务器的JSON响应中已经存在相应的css类:

[
{"attr":{"id":"node_5","rel":"document","page_id":"4"},"data":"Test123","csscl":"ui-state-error","state":""},
{"attr":{"id":"node_6","rel":"folder","page_id":"6"},"data":"Services","csscl":"","state":"closed"}
]
我的“Test123”节点应该在树的后面获得类“ui state error”。 这是我的jsTree:

$(function () {
// Settings up the tree. note to self: dont use the cookie plugin here, this will always overwrite pre-selected nodes
$("#jstree").jstree({
    "plugins" : [ "themes", "json_data", "ui", "types", "hotkeys",],
    "json_data" : { 
        "ajax" : {
            "url" : "inc/tree_server.php",
            "data" : function (n) {
                return { 
                    "operation" : "get_children", 
                    "id" : n.attr ? n.attr("id").replace("node_","") : 1 
                };
            },
            success: function(n) {

                for (var i in n)
                {
                    jqid = "#"+n[i].attr["id"]+" a";
                    $(jqid).addClass(n[i].csscl);
                }                   
            }
        }
    },
    // the UI plugin
    "ui" : {
        // selected onload
        "initially_select" : [ "node_<?=$p->oTopic->iId;?>" ]
    },
    // the core plugin
    "core" : { 
        "initially_open" : [ <?=$p->oTopic->sJstreeOpenSeq;?> ],
        "animation" : 0
    }
})
$(函数(){
//请注意:不要在这里使用cookie插件,这将始终覆盖预先选择的节点
$(“#jstree”).jstree({
“插件”:[“主题”、“json_数据”、“ui”、“类型”、“热键”、],
“json_数据”:{
“ajax”:{
“url”:“inc/tree_server.php”,
“数据”:功能(n){
返回{
“操作”:“获取子项”,
“id”:n.attr?n.attr(“id”)。替换(“节点”,“”):1
};
},
成功:功能(n){
for(n中的变量i)
{
jqid=“#”+n[i].attr[“id”]+“a”;
$(jqid).addClass(n[i].csscl);
}                   
}
}
},
//用户界面插件
“用户界面”:{
//选择加载
“最初选择”:[“节点”]
},
//核心插件
“核心”:{
“初始打开”:[],
“动画”:0
}
})
这是行不通的。我认为会发生的是,在加载树之后,但在绘制或准备JQuery查找所选节点并应用我的类之前,调用“success:function(n)”。
任何人都知道如何解决这个问题,或者可能有更好的方法将css类应用于$(“#node5a”),在这种情况下…?

我想我找到了一个解决方法

    success: function(n) {
        for (var i in n)
        {
            some_global_array_id.push(n[i].attr["id"]);
            some_global_array_data.push(n[i].csscl);
        }                   
    }
然后在加载和绘制之后,您可以调用如下函数:

$("#jstree").jstree({
       // ... code you posted
    }).bind("reopen.jstree", function (e, data) {
       for (var i in some_global_array_id) {
           $("#"+some_global_array_id[i]+" a").addClass(some_global_array_data[i]);
       }
    });

可以更轻松地完成此操作。将成功函数替换为:

success: function(n) 
{
    for(var i = 0; i < n.length; i++)
    {
        n[i].data.attr['class'] = n[i].csscl;
    }
    return n;         
}
成功:函数(n)
{
对于(变量i=0;i
您尝试过jsTree讨论组吗?您可以在“数据”对象中设置它吗?“attr”:{“class”:“csscl”}?请看这里的第一个演示。jsTree最新版本的语法已更改。请参阅此文档:。它现在应为:
n[i]。li_attr['class']
n[i]。a_attr['class']