jsTree工作筆記001---jsTree的基本使用_js實現樹形結構

技術交流QQ羣【JAVA,C++,Python,.NET,BigData,AI】:170933152 

判斷用戶有沒有選中節點:

var treeown = $('#tree_' + own).jstree(true);//獲得整個樹
if (treeown) {
    var selectednode = _getCurrNode(own);
    if (selectednode) {
        //沒有勾選是否功能菜單
       //$.modal.alertWarning("請先選中要刪除的菜單!!");
    } else {
        $.modal.alertWarning("請先選中要刪除的菜單!!");
        return;
    }
}
/**
 *   獲取當前所選中的結點
 */
function _getCurrNode(own){
    var ref = $('#tree_' + own).jstree(true),
        sel = ref.get_selected();
    console.log(sel);
    if(!sel.length) {
        console.log("----");
        return false;
    }
    selsel = sel[0];
    return sel;
}

判斷是否爲最末級菜單:

//獲取選中節點,判斷該節點有無子節點:
var treeown = $('#tree_' + own).jstree(true);//獲得整個樹
if (treeown) {
    var selectednode = _getCurrNode(own);
    if (util.isEmpty(variety)) {
        //沒有勾選是否功能菜單
    } else {
        if (treeown.is_leaf(selectednode)) {
            //如果是最末級別,可以選擇爲功能菜單
        } else {
            //否則不能勾選爲功能菜單
            $.modal.alertWarning("請勾選末級菜單爲功能菜單!");
            return;
        }
    }
}

判斷是否有子節點:

有3種方法:

  1. 用is_parent( node)方法, node傳節點ID或節點對象, 有下級節點則返回true.

  2. 用is_leaf(node)方法, 此方法表示是否爲最末級, 剛好和is_parent相反.

  3. 在事件中獲取node對象, 其中node.child爲包含所有直接子節點的數組, node.child.length === 0 則沒有下級節點.

示例:

html

1

<div id="tree"></div>

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

var $tree = $('#tree');

$tree.jstree({

    core: {

        data: [

            { id: '1', parent: '#', text: "1" },

            { id: '2', parent: '1', text: "11" },

            { id: '3', parent: '1', text: "12" },

            { id: '4', parent: '2', text: "111" }

        ]

    }

});

 

$tree.on('ready.jstree'function () {

    //jQuery風格

    $tree.jstree('is_parent''2'); //true

    $tree.jstree('is_leaf''2'); //false

     

    //使用jstree實例對象操作

    var tree = $tree.jstree(true);

    tree.is_parent('4'); //false

    tree.is_leaf('4'); //true 

     

    //注意: jstree的初始化是一個異步過程, 如果上述代碼沒有放在初始化完成的事件中,將不會得到正確的結果,因爲執行代碼時,jstree還沒生成.

});

 

//jstree事件中的應用

$tree.on('select_node.jstree'function (e, data) {

    var node = data.node;

    if(node.child.length > 0)

        console.log('此節點有下級節點');

         

    var tree = data.instance;

    if(tree.is_parent(node)) //這裏無需tree.is_parent(node.id), is_parent方法可以node對象作爲參數.

        console.log('此節點有下級節點');     

});

 

補充:刷新樹
$('#tree_' + own).jstree(true).refresh();

 

需要導入這兩個文件: 

<link href="../plugins/jstree/dist/themes/default/style.min.css" rel="stylesheet" type="text/css" />
<script src="../plugins/jstree/dist/jstree.min.js" type="text/javascript"></script>

這裏需要注意:如果用jstree之前,一棵樹,不銷燬的話,繼續用是沒有效果的jstree,會還是之前構建的樹,用之前需要銷燬之前的.

需要調用:

$('#tab_1').jstree("destroy");

這樣來把之前的樹銷燬一下,重新生成新的纔行

 

1.定義:

其實定義一個id,就可以來初始化一個tree

<div class="tab-content">
    <div class="tab-pane active" id="tab_1">
    </div>
    <div class="tab-pane" id="tab_2">
    </div>
    <div class="tab-pane" id="tab_3">
    </div>
    <div class="tab-pane" id="tab_4">
    </div>
    <div class="tab-pane active" id="tab_5">
    </div>
</div>

2. 初始化一棵樹

根據div的id初始化一棵樹:

$('#tab_'+own).jstree({
    "core" : {
        "themes" : {
            "responsive": false
        },
        "check_callback" : true,
        'data' : function (obj, callback) {
            var jsonstr="[]";
            var jsonarray = eval('('+jsonstr+')');
            constant.ajax.get({ //傳給後臺的數據,以及訪問後臺的url
                url:http://localhost:8081/sc-test/getmenu,
                data:{curSystem:own,type:1,curroleId:curoleid},//傳給後臺的數據,根據需要寫
                async: false,
                success:function(result) { //只有這裏需要自己寫
                    var arrays= result.data.list;
                    for(var i=0 ; i<arrays.length; i++){
                        if(arrays[i].parentMenuid==null){
                            arrays[i].parentMenuid = 0;
                        }
                        var arr = {
                            "id":arrays[i].id,//樹節點的id
                        "parent":arrays[i].parentMenuid==0?"#":arrays[i].parentMenuid        父節點
                            "text":arrays[i].menuName,//顯示菜單名字
                            "state":{"selected":arrays[i].isselected}
                             //這裏,標識一個節點的CheckBox是否爲選中的狀態如果,樹
                             //沒有CheckBox,則不需要state":這個部分
                        }
                        jsonarray.push(arr);
                    }
                }
            })
            callback.call(this, jsonarray);
        }
    },
    "types" : {
        "default" : {
            "icon" : "fa fa-folder icon-state-warning icon-lg"
        },
        "file" : {
            "icon" : "fa fa-file icon-state-warning icon-lg"
        }
    },
    "state" : { "key" : "demo2" },
    "checkbox" : {
        "keep_selected_style" : true
    },
    "plugins" : ["themes","contextmenu",'checkbox'] 
    // "plugins":["themes","html_data","contextmenu"] 
    //這個是不帶CheckBox的,如需要CheckBox,使用上面的
});

3.根據選擇的樹的某一節點,的時候做什麼動作


$('#tab_'+own).on('changed.jstree',function(e,data){
    //當前選中節點的id
    var domId = data.instance.get_node(data.selected[0]).id;
    //當前選中節點的文本值
    //var value = data.instance.get_node(data.selected[0]).text;

    if(domId!=undefined){
        constant.ajax.get({
            url:constant.url.sc_support.cmenu+"/"+domId,//根據選中的節點id去後臺取數據
            data:{},
            async:false,
            success:function(data){
                var result = data.data;
                //console.log(result);
                if(result!=null){
                    menuId = result.id;
                    debugger;
                    $('#parentMenuid'+own).val(result.parentMenuid);
                    $('#menuName'+own).val(result.menuName);
                    $('#menuUrl'+own).val(result.menuUrl);
                    $('#menuOrder'+own).val(result.menuOrder);
                    $('#menuIcon'+own).val(result.menuIcon);
                    if(result.variety=="1"){
                       //讓:<input id="isvariety" type="checkbox" style="margin-left: 10px;vertical-align: text-bottom;" name="isvariety" value="1">
//類似於上面這個選中,或非選中
                        $("#isvariety").prop("checked","checked");
                    }else{
                        $("#isvariety").prop("checked",false);
                    }
                    // if(own==dic.getByDictId("SYS_TYPE","SYS_PE").code)
                    //     $("#variety").val(result.varIety);
                    // }
                }
            },
            error:function(){
            }
        })
    }
});

 4.點擊保存的時候,獲取選中的節點值傳給後臺處理

$("#btnSaveRoleAccess").click(function () {//這裏有5顆樹,獲取每顆樹,上CheckBox被選中的部分

        var slectedArray=[];
        debugger;

        var tab1 = $('#tab_1').jstree(true);//獲得整個樹
        if(tab1){//如果樹不爲null
            var tab1CheckedNodes = tab1.get_checked(true);
            tab1CheckedNodes.forEach(function(e)
            {
                if(!!e.parent && e.parent!="#"){
                    slectedArray.push({"id":e.id,"text":e.text,"systype":"1"});
                }
            });
        }

        var tab2 = $('#tab_2').jstree(true);//獲得整個樹
        if(tab2){
            var tab2CheckedNodes = tab2.get_checked(true);
            tab2CheckedNodes.forEach(function(e)
            {
                if(!!e.parent && e.parent!="#"){
                    slectedArray.push({"id":e.id,"text":e.text,"systype":"2"});
                }
            });
        }

        var tab3 = $('#tab_3').jstree(true);//獲得整個樹
        if(tab3){
            var tab3CheckedNodes = tab3.get_checked(true);
            tab3CheckedNodes.forEach(function(e)
            {
                if(!!e.parent && e.parent!="#"){
                    slectedArray.push({"id":e.id,"text":e.text,"systype":"3"});
                }
            });
        }

        var tab4 = $('#tab_4').jstree(true);//獲得整個樹
        if(tab4){
            var tab4CheckedNodes = tab4.get_checked(true);
            tab4CheckedNodes.forEach(function(e)
            {
                if(!!e.parent && e.parent!="#"){
                    slectedArray.push({"id":e.id,"text":e.text,"systype":"4"});
                }
            });
        }

        var slectedArrayStr=JSON.stringify(slectedArray);

        var cmParam = {};
        var role={}

        role.rolename = $("#inputrolename").val();
        role.roleintro = $("#inputroleintro").val();
        role.roleid = curoleid;

        cmParam.type = "addBusMenuAccess";
        cmParam.mark = JSON.stringify(role);
        cmParam.data = slectedArrayStr;//發給後臺處理

        constant.ajax.post(constant.url.sc_support.rolebusmenuaccess,cmParam,
            function (data){
                if(data.data==0){
                    swal('操作成功','','success');
                    accessArray();
                }else{
                    swal('請先添加這個權限','','warning')
                }
                //$("#btn-rolepermiss").trigger("click");
                //$("a[class = 'jstree-anchor jstree-clicked']:contains('角色權限關聯')").trigger("click");
            },
            function (err){},
            null
        )
    });

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章