Jquery.dynatree基礎示例

 

目錄

前言

示例

htmlDemo

初始化樹結構

ajax返回值格式

api介紹(內容摘自網絡,自行校驗是否可行)

初始化樹結構其餘參數

節點的其餘屬性

樹對象的事件函數

樹對象的api函數

樹節點的api函數


 

前言

用這個dynatree寫了一個前端的樹形結構,還挺好用的。這裏總結一下。

官網:https://plugins.jquery.com/dynatree/

依賴jquery

 

示例

htmlDemo

<div class="col-xs-8">
    <div class="form-group">
        <label class="col-xs-2 control-label no-padding-right" for="taxItem">核稅項目:</label>
        <input type="hidden" name="taxItemKeys"/>
        <input id="taxItem" name="taxItemNames" class="col-xs-9" type="text" readonly="true" style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;" placeholder="所屬核稅項目">
        <div class="btn-group">
            <span class="btn btn-white dropdown-toggle" onclick="document.getElementById('taxItem_treeDv').setAttribute('class','form-group');">
                <span class="ace-icon fa fa-caret-down icon-only"></span>
            </span>
	</div>
    </div>
</div>

<div class="col-xs-8">
    <div class="hide" id="taxItem_treeDv">
        <label class="col-xs-2 control-label no-padding-right">請選擇:</label>
        <div class="widget-box col-xs-7" style="max-height:250px;overflow-x:hidden;">
            <div id="inTaxItemTree"></div>
	</div>
    </div>
</div>

初始化樹結構

jQuery("#inTaxItemTree").dynatree({
    debugLevel: 0,
    selectMode: 2,
    checkbox: true,
    minExpandLevel: 1,
    initAjax: {url: "taxItem/treeList.htm"},
    ajaxDefaults: {cache: false, dataType: "json"},
    onSelect: function (select, node) {
        var nodes = node.tree.getSelectedNodes();
        var titles = [];
        var keys = [];
        $(nodes).each(function (index, item) {
            var data = item.data ;
            if (!data.folder){
                titles.push(data.title);
                keys.push(data.key);
            }
        });
        $("input[name='taxItemKeys']").val(keys);
        $("#taxItem").val(titles.join(","));
    }
});

參數說明

  • debugLevel                調試模式:0.關閉;1.normal;2.debug
  • selectMode                1:單選;2:多選;3:多層多選
  • checkbox                   是否顯示選擇框
  • minExpandLevel        最小摺疊層數
  • ajaxDefaults               配置ajax請求的參數
  • onSelect                     選中節點觸發事件
  • initAjax                       初始化數據請求的ajax地址  ↓傳參示例↓  (大數據量建議採用延遲加載子節點)
initAjax: {
    url: "taxItem/treeList.htm",
    data:{
        "param1":"val1",
        "param2":"val2"
    }
}

 

 

ajax返回值格式

對返回數據格式嚴格要求,將自動處理

java對象示例


/**
 * @author 954L
 * @create 2019/11/1 14:08
 */
public class DynaTreeResult {

    /**
     * 顯示的名稱
     */
    private String title;

    /**
     * val
     */
    private String key;

    /**
     * 是否是父節點
     */
    private Boolean isFolder;

    /**
     * 子節點
     */
    private List<DynaTreeResult> children;


    // get,set    

}

構造數據遞歸示例

List<DynaTreeResult> dynaTreeResultList = new ArrayList<>();
// 構造樹結構
for (TaxItem.TaxItemVO taxItemVO : taxItemVOList) {
    if (!taxItemVO.getParentId().equals("0")) break;
    DynaTreeResult dynaTreeResult = new DynaTreeResult();
    dynaTreeResult.setKey(taxItemVO.getId());
    dynaTreeResult.setFolder(true);
    dynaTreeResult.setTitle(taxItemVO.getItemName());
    // 遞歸查找
    findChildren(dynaTreeResult, new ArrayList<>(taxItemVOList));
    dynaTreeResultList.add(dynaTreeResult);
}
return dynaTreeResultList;


private void findChildren(DynaTreeResult dynaTreeResult, ArrayList<TaxItem.TaxItemVO> taxItemVOList) {
    List<DynaTreeResult> dynaTreeResultChildrenList = new ArrayList<>();
    for (TaxItem.TaxItemVO taxItemVO : taxItemVOList) {
        if (taxItemVO.getParentId().equals(dynaTreeResult.getKey())) {
            DynaTreeResult dynaTreeResultChildren = new DynaTreeResult();
            dynaTreeResultChildren.setKey(taxItemVO.getId());
            dynaTreeResultChildren.setTitle(taxItemVO.getItemName());
            dynaTreeResultChildren.setFolder(taxItemVO.getIsSort().equals(1) ? true : false);
            findChildren(dynaTreeResultChildren, taxItemVOList);
            dynaTreeResultChildrenList.add(dynaTreeResultChildren);
        }
    }
    dynaTreeResult.setChildren(dynaTreeResultChildrenList);
}

js處理數據回顯

$("#inTaxItemTree_new").dynatree("getRoot").visit(function(node){
    $(data).each(function (index, item) {
        if (item.id == node.data.key){
            node.select(true);
            node.makeVisible();
            return false;
        }
    })
});

函數說明

  • tree.dynatree("getRoot")                    獲取樹結構所有根節點
  • tree.dynatree("getRoot").visit(fun)     遍歷每個節點的子節點
  • node.select(true)                               選中該節點的多選框
  • node.makeVisible()                            展開該節點的所有父節點

 

 

api介紹(內容摘自網絡,自行校驗是否可行)

初始化樹結構其餘參數

  • title                           設置樹名稱
  • imagePath               引用圖標路徑
  • keyboard                  鍵盤導航
  • autoFocus                自動設置焦點
  • persist                       從cookie中讀取數據
  • noLink                       使用span標籤替換a標籤,取消懸浮顯示a標籤效果

 

節點的其餘屬性

  • isLazy                         是否延遲加載
  • title                             顯示的節點名字
  • key                             節點唯一標識
  • isFolder                      是否是父節點(可展開)
  • tooltip                         鼠標顯示
  • icon                            圖標
  • addClass                    添加class屬性
  • noLink                        使用span標籤替換a標籤,取消懸浮顯示a標籤效果
  • activate                      初始活動狀態
  • focus                          初始獲得焦點
  • hideCheckbox            隱藏選擇框
  • unselectable               不可被選中
  • children                       子節點

 

樹對象的事件函數

  • onLazyRead                延遲加載子節點
  • onPostInit                    處理初始化節點是否選中
  • ajaxDefaults                ajax的屬性配置
  • onClick                        點擊事件
  • strings                         顯示加載中的提示信息  ↓傳參示例↓  
strings:{
    loading:"加載中.....",
    loadError:"加載異常!"
}

 

樹對象的api函數

  • tree.dynatree("disable")                                      禁用樹
  • tree.dynatree("enable")                                       啓用樹
  • tree.dynatree("option", "屬性名", "屬性值")         設置樹的屬性
  • tree.dynatree("getTree")                                      獲取樹對象
  • tree.dynatree("getRoot")                                      獲取樹的根節點
  • tree.dynatree("getActivateNode")                        獲取當前選中的節點
  • tree.dynatree("getSelectedNodes")                     獲取所有被選中的節點
  • tree.count()                                                          獲取節點數量
  • tree.disable()                                                       禁用樹
  • tree.enable()                                                        啓用樹
  • tree.enableUpdate()                                            設置樹是否可以更新
  • tree.getActivateNode()                                        獲取當前選中的節點
  • tree.getNodeByKey(key)                                     根據key獲取節點對象
  • tree.getRoot()                                                      獲取根節點
  • tree.getSelectedNodes()                                     獲取所有選中的節點
  • tree.reload                                                           重新加載樹
  • tree.visit(fun)                                                       遍歷所有節點

 

樹節點的api函數

  • node.activate()                                                   將節點設爲活躍並觸發activate事件
  • node.activateSilently()                                        將節點設爲活躍不觸發activate事件
  • node.deactivate()                                                取消節點活躍狀態
  • node.isActive()                                                    獲取活躍狀態
  • node.addChild(nodeData,[beforeNode])            爲節點添加子節點
  • node.appendAjax(ajaxOptions)                          ajax方式添加節點
  • node.countChildren()                                          獲取子節點數量
  • node.expand(true)                                              是否展開該節點
  • node.focus()                                                        設置節點爲焦點
  • node.isFocused()                                                獲取節點焦點狀態
  • node.getLevel()                                                   獲取該節點的層級
  • node.getChildren()                                              獲取該節點的所有子節點
  • node.hasChildren()                                             該節點是否有子節點
  • node.isChildOf(otherNode)                                 判斷是否是另一個節點的子節點
  • node.isExpanded()                                              獲取該節點的展開狀態
  • node.isFirstSibling()                                            是否是所有兄弟節點中的第一個節點
  • node.isLastSibling()                                            是否是所有兄弟節點中的最後一個節點
  • node,isLazy()                                                      獲取該節點的lazy狀態
  • node.isSelected()                                                獲取該節點的選中狀態
  • node.isVisible()                                                    獲取該節點的可見狀態
  • node.makeVisible()                                              展開該節點的所有父節點
  • node.move(targetNode, node)                             移動目標節點到另一個節點
  • node.reloadChildren(callback)                             重新加載該節點及所有子節點(node屬性必須lazy延遲加載)
  • node.remove()                                                     移除該節點
  • node.removeChildren()                                        移除所有子節點
  • node.resetLazy()                                                  重置該節點的lazy屬性,移除所有子節點
  • node.select(true)                                                  選中該節點
  • node.setLazyNodeStatus(status)                         設置該lazy節點點擊樣式;  ↓status示例↓

DTNodeStatus_Loading(等待樣式);DTNodeStatus_Error(加載錯誤樣式);DTNodeStatus_ok(移除lazy屬性)

  • node.setTitle()                                                       設置該節點的顯示名字
  • node.sortChildren(cmp, deep)                              對該節點所有子節點進行排序;cmp:排序函數;deep:排序層級,true:所有
  • node.toggleSelect()                                               反選節點
  • node.visit(fun)                                                        遍歷該節點所有子節點
  • node.visitParents(fun)                                            遍歷所有父節點

 

 

對你有幫助的話,右上角給個讚唄~

 

 

 

 

 

 

 

 

 

 

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