jQuery EasyUI 數據網格與樹插件 - Tree 樹

通過 $.fn.tree.defaults 重寫默認的 defaults。
樹(tree)在網頁中以樹形結構顯示分層數據。它向用戶提供展開、折疊、拖拽、編輯和非同步加載功能。

依賴
- draggable
- droppable
用法
樹(tree)定義在 <ul> 元素中。該標記可定義葉節點和子節點。節點將是 ul 列表內的 <li> 元素。下麵演示了將被用於製作嵌套在 ul 元素內的樹節點的元素。
<ul id="tt" class="easyui-tree"> <li> <span>Folder</span> <ul> <li> <span>Sub Folder 1</span> <ul> <li><span><a href="#">File 11</a></span></li> <li><span>File 12</span></li> <li><span>File 13</span></li> </ul> </li> <li><span>File 2</span></li> <li><span>File 3</span></li> </ul> </li> <li><span>File21</span></li> </ul>
樹(Tree)也可以在一個空的 <ul> 元素中定義,可使用 javascript 加載數據。
<ul id="tt"></ul>
$('#tt').tree({ url:'tree_data.json' });
使用 loadFilter 來處理來自 ASP.NET web 服務的 json 數據。
$('#tt').tree({ url: ..., loadFilter: function(data){ if (data.d){ return data.d; } else { return data; } } });
樹的數據格式(Tree Data Format)
每個節點可以包括下列屬性:
- id:節點的 id,它對於加載遠程數據很重要。
- text:要顯示的節點文本。
- state:節點狀態,'open' 或 'closed',默認是 'open'。當設置為 'closed' 時,該節點有子節點,並且將從遠程站點加載它們。
- checked:指示節點是否被選中。
- attributes:給一個節點添加的自定義屬性。
- children:定義了一些子節點的節點數組。
實例:
[{ "id":1, "text":"Folder1", "iconCls":"icon-save", "children":[{ "text":"File1", "checked":true },{ "text":"Books", "state":"open", "attributes":{ "url":"/demo/book/abc", "price":100 }, "children":[{ "text":"PhotoShop", "checked":true },{ "id": 8, "text":"Sub Bookds", "state":"closed" }] }] },{ "text":"Languages", "state":"closed", "children":[{ "text":"Java" },{ "text":"C#" }] }]
非同步樹
樹支持內置的非同步加載模式,因此用戶可以創建一個空的樹,然後指定一個動態返回 JSON 數據的伺服器端,用於根據需求非同步填充樹。下麵是一個實例:
<ul class="easyui-tree" data-options="url:'get_data.php'"></ul>
樹是通過 URL 'get_data.php' 加載的。子節點依賴於父節點狀態被加載。當展開一個關閉的節點時,如果該節點沒有子節點加載,它將通過上面定義的 URL 向伺服器發送節點的 id 值作為名為 'id' 的 http 請求參數,以便檢索子節點。
請看從伺服器返回的數據:
[{ "id": 1, "text": "Node 1", "state": "closed", "children": [{ "id": 11, "text": "Node 11" },{ "id": 12, "text": "Node 12" }] },{ "id": 2, "text": "Node 2", "state": "closed" }]
節點 1 和節點 2 是關閉的,當展開節點 1 時,將直接展示它的子節點。當展開節點 2 時,將向伺服器發送 value(2) 以便檢索子節點。
本教程中的 創建非同步樹 演示了如何編寫伺服器代碼來根據需求返回樹的數據。
屬性
名稱 | 類型 | 描述 | 默認值 |
---|---|---|---|
url | string | 獲取遠程數據的 URL 。 | null |
method | string | 檢索數據的 http 方法(method)。 | post |
animate | boolean | 定義當節點展開折疊時是否顯示動畫效果。 | false |
checkbox | boolean | 定義是否在每個節點前邊顯示複選框。 | false |
cascadeCheck | boolean | 定義是否級聯檢查。 | true |
onlyLeafCheck | boolean | 定義是否只在葉節點前顯示複選框。 | false |
lines | boolean | 定義是否顯示樹線條。 | false |
dnd | boolean | 定義是否啟用拖放。 | false |
data | array | 要加載的節點數據。
$('#tt').tree({ data: [{ text: 'Item1', state: 'closed', children: [{ text: 'Item11' },{ text: 'Item12' }] },{ text: 'Item2' }] }); |
null |
formatter | function(node) | 定義如何呈現節點文本。 代碼實例: $('#tt').tree({ formatter:function(node){ return node.text; } }); |
|
loader | function(param,success,error) | 定義如何從遠程伺服器加載數據。返回 false 則取消該動作。該函數有下列參數: param:要傳遞到遠程伺服器的參數對象。 success(data):當檢索數據成功時調用的回調函數。 error():當檢索數據失敗時調用的回調函數。 |
json loader |
loadFilter | function(data,parent) | 返回要顯示的過濾數據。返回數據時以標準樹格式返回的。該函數有下列參數: data:要加載的原始數據。 parent:DOM 對象,表示父節點。 |
事件
很多事件的回調函數需要 'node' 參數,它包括下列屬性:
- id:綁定到節點的標識值。
- text:要顯示的文本。
- iconCls:用來顯示圖示的 css class。
- checked:節點是否被選中。
- state:節點狀態,'open' 或 'closed'。
- attributes:綁定到節點的自定義屬性。
- target:目標的 DOM 對象。
名稱 | 參數 | 描述 |
---|---|---|
onClick | node | 當用戶點擊一個節點時觸發。代碼實例:
$('#tt').tree({ onClick: function(node){ alert(node.text); // alert node text property when clicked } }); |
onDblClick | node | 當用戶雙擊一個節點時觸發。 |
onBeforeLoad | node, param | 當加載數據的請求發出前觸發,返回 false 則取消加載動作。 |
onLoadSuccess | node, data | 當數據加載成功時觸發。 |
onLoadError | arguments | 當數據加載失敗時觸發,arguments 參數與 jQuery.ajax 的 'error' 函數一樣。 |
onBeforeExpand | node | 節點展開前觸發,返回 false 則取消展開動作。 |
onExpand | node | 當節點展開時觸發。 |
onBeforeCollapse | node | 節點折疊前觸發,返回 false 則取消折疊動作。 |
onCollapse | node | 當節點折疊時觸發。 |
onBeforeCheck | node, checked | 當用戶點擊複選框前觸發,返回 false 則取消該選中動作。該事件自版本 1.3.1 起可用。 |
onCheck | node, checked | 當用戶點擊複選框時觸發。 |
onBeforeSelect | node | 節點被選中前觸發,返回 false 則取消選擇動作。 |
onSelect | node | 當節點被選中時觸發。 |
onContextMenu | e, node | 當右鍵點擊節點時觸發。代碼實例:
// right click node and then display the context menu $('#tt').tree({ onContextMenu: function(e, node){ e.preventDefault(); // select the node $('#tt').tree('select', node.target); // display context menu $('#mm').menu('show', { left: e.pageX, top: e.pageY }); } }); // the context menu is defined as below: <div id="mm" class="easyui-menu" style="width:120px;"> <div onclick="append()" data-options="iconCls:'icon-add'">Append</div> <div onclick="remove()" data-options="iconCls:'icon-remove'">Remove</div> </div> |
onBeforeDrag | node | 當節點的拖拽開始時觸發,返回 false 則禁止拖拽。該事件自版本 1.3.2 起可用。 |
onStartDrag | node | 當開始拖拽節點時觸發。該事件自版本 1.3.2 起可用。 |
onStopDrag | node | 當停止拖拽節點時觸發。該事件自版本 1.3.2 起可用。 |
onDragEnter | target, source | 當節點被拖拽進入某個允許放置的目標節點時觸發,返回 false 則禁止放置。 target:被放置的目標節點元素。 source:被拖拽的源節點。 該事件自版本 1.3.2 起可用。 |
onDragOver | target, source | 當節點被拖拽到允許放置的目標節點上時觸發,返回 false 則禁止放置。 target:被放置的目標節點元素。 source:被拖拽的源節點。 該事件自版本 1.3.2 起可用。 |
onDragLeave | target, source | 當節點被拖拽離開允許放置的目標節點時觸發。 target:被放置的目標節點元素。 source:被拖拽的源節點。 該事件自版本 1.3.2 起可用。 |
onBeforeDrop | target,source,point | 節點被放置之前觸發,返回 false 則禁止放置。 target:DOM 對象,放置的目標節點。 source:源節點。 point:表示放置操作,可能的值是:'append'、'top' 或 'bottom'。 該事件自版本 1.3.2 起可用。 |
onDrop | target,source,point | 當節點被放置時觸發。
target:DOM 對象,放置的目標節點。 source:源節點。 point:表示放置操作,可能的值是:'append'、'top' 或 'bottom'。 |
onBeforeEdit | node | 編輯節點前觸發。 |
onAfterEdit | node | 編輯節點後觸發。 |
onCancelEdit | node | 當取消編輯動作時觸發。 |
方法
名稱 | 參數 | 描述 |
---|---|---|
options | none | 返回樹的選項(options)。 |
loadData | data | 加載樹的數據。 |
getNode | target | 獲取指定的節點對象。 |
getData | target | 獲取指定的節點數據,包括它的子節點。 |
reload | target | 重新加載樹的數據。 |
getRoot | none | 獲取根節點,返回節點對象。 |
getRoots | none | 獲取根節點,返回節點數組。 |
getParent | target | 獲取父節點,target 參數表示節點的 DOM 對象。 |
getChildren | target | 獲取子節點, target 參數表示節點的 DOM 對象。 |
getChecked | state | 獲取選中的節點。狀態可用值有:'checked'、'unchecked'、'indeterminate'。如果狀態未分配,則返回 'checked' 節點。 代碼實例: var nodes = $('#tt').tree('getChecked'); // get checked nodes var nodes = $('#tt').tree('getChecked', 'unchecked'); // get unchecked nodes var nodes = $('#tt').tree('getChecked', 'indeterminate'); // get indeterminate nodes var nodes = $('#tt').tree('getChecked', ['checked','indeterminate']); // get checked and indeterminate nodes |
getSelected | none | 獲取選中的節點並返回它,如果沒有選中節點,則返回 null。 |
isLeaf | target | 把指定的節點定義成葉節點,target 參數表示節點的 DOM 對象。 |
find | id | 找到指定的節點並返回該節點對象。代碼實例:
// find a node and then select it var node = $('#tt').tree('find', 12); $('#tt').tree('select', node.target); |
select | target | 選中一個節點,target 參數表示節點的 DOM 對象。 |
check | target | 把指定節點設置為勾選。 |
uncheck | target | 把指定節點設置為未勾選。 |
collapse | target | 折疊一個節點,target 參數表示節點的 DOM 對象。 |
expand | target | 展開一個節點,target 參數表示節點的 DOM 對象。當節點關閉且沒有子節點時,節點的 id 值(名為 'id' 參數)將被發送至伺服器以請求子節點數據。 |
collapseAll | target | 折疊所有的節點。 |
expandAll | target | 展開所有的節點。 |
expandTo | target | 從根部展開一個指定的節點。 |
scrollTo | target | 滾動到指定節點。該方法自版本 1.3.4 起可用。 |
append | param | 追加一些子節點到一個父節點,param 參數有兩個屬性: parent:DOM 對象,要追加到的父節點,如果沒有分配,則追加為根節點。 data:數組,節點的數據。 代碼實例: // append some nodes to the selected node var selected = $('#tt').tree('getSelected'); $('#tt').tree('append', { parent: selected.target, data: [{ id: 23, text: 'node23' },{ text: 'node24', state: 'closed', children: [{ text: 'node241' },{ text: 'node242' }] }] }); |
toggle | target | 切換節點的展開/折疊狀態,target 參數表示節點的 DOM 對象。 |
insert | param | 在指定節點的前邊或後邊插入一個節點,param 參數包括下列屬性: before:DOM 對象,前邊插入的節點。 after:DOM 對象,後邊插入的節點。 data:對象,節點數據。 下麵的代碼演示了如何在選中節點之前插入一個新的節點: var node = $('#tt').tree('getSelected'); if (node){ $('#tt').tree('insert', { before: node.target, data: { id: 21, text: 'node text' } }); } |
remove | target | 移除一個節點和它的子節點,target 參數表示節點的 DOM 對象。 |
pop | target | 彈出一個節點和它的子節點,該方法和 remove 一樣,但是返回了移除的節點數據。 |
update | param | 更新指定的節點,'param' 參數有下列屬性: target(DOM 對象,要被更新的節點)、id、text、iconCls、checked,等等。 代碼實例: // update the selected node text var node = $('#tt').tree('getSelected'); if (node){ $('#tt').tree('update', { target: node.target, text: 'new text' }); } |
enableDnd | none | 啟用拖放功能。 |
disableDnd | none | 禁用拖放功能。 |
beginEdit | target | 開始編輯節點。 |
endEdit | target | 結束編輯節點。 |
cancelEdit | target | 取消編輯節點。 |
