基於JQuery的自定義樹形選單表格,實現展開、收起效果
最近的專案不允許使用框架,遇到自定義樹形表格的頁面功能。
為了趕時間,就想找現成的,百度找到“基於JQuery TreeTable實現的屬性表單”,結果進去一看,都是一毛一樣的,沒有實現方式的程式碼,深深懷疑是不是就抄個程式碼根本沒有自己測試過,也浪費了不少時間。
之後仔細一想,其實實現並不困了,不一定非要找現成的。按照自己的思路,做出結果如下,如有bug歡迎指正。
思路
我想的很簡單,
- 一個箭頭顯示開啟、收起的樣式;
- 在箭頭上加入toggle()方法控制一級選單下的所有子選單的樣式,通過display樣式控制子選單隱藏/顯示,從而實現樹型選單開啟、收起的效果;
- 在子級上新增自定義屬性open來標識當前子級是隱藏還是展開,通過pid來關聯父級。
效果
引用
(可能還有需要引入的,如果有報錯根據提示新增)
<script th:src="@{/plugins/jquery/jquery.min.js}"></script>
HTML
<div class="card">
<table id="treeTable" class="table">
<thead>
<tr role="row">
<th>分類名稱</th>
<th>分類級別</th>
<th>操作</th>
</tr>
</thead>
<tbody id="class-info">
</tbody>
</table>
</div>
JS
$(function () {
loadTreeTable();
})
// 載入table資料
function loadTreeTable() {
commonGet("/admin/serverClass/list", {}).then(res => {
if (res.code === '200') {
var list = res.data;
if (list !== null) {
var html = '';
for (var i = 0; i < list.length; i++) {
var listChild = list[i].childrenServiceClasses;
// 如果有子元素,則設定toggle()
if (listChild !== null && listChild.length > 0) {
html += '<tr id="' + list[i].id + '" pid="0">\n' +
' <td><span class="switch-close" οnclick="toggle(this)"></span><span class="folder">' + list[i].className + '</span></td>\n' +
' <td>' + list[i].level + '</td>\n' +
' <td>操作</td>\n' +
'</tr>';
} else {
html += '<tr id="' + list[i].id + '" pid="0">\n' +
' <td>' + list[i].className + '</td>\n' +
' <td>' + list[i].level + '</td>\n' +
' <td>操作</td>\n' +
'</tr>';
}
// 所有子元素新增pid和自定義的open屬性
if (listChild !== null && listChild.length > 0) {
for (var j = 0; j < listChild.length; j++) {
html += '<tr open="true" id="' + listChild[j].id + '" pid="' + listChild[j].parentId + '">\n' +
' <td style="padding-left: 50px;">' + listChild[j].className + '</td>\n' +
' <td>' + listChild[j].level + '</td>\n' +
' <td>操作</td>\n' +
'</tr>';
}
}
}
$("#class-info").append(html);
}
}
})
}
//處理展開和收起
function toggle(eve) {
var par = eve.parentNode.parentNode; // 當前的tr
var parentId = par.getAttribute("id"); //父級id
var bool = par.nextSibling.getAttribute("open"); //通過open屬性定義當前tr是否展開
if(bool) {
eve.className='switch-open';
$("tr[pid$="+parentId+"]").css("display","none"); // 所有pid=parentId的tr元素隱藏
$("tr[pid$="+parentId+"]").attr("open", false); // 標記這些tr元素open屬性,再次點選就會實現相反操作
} else {
eve.className='switch-close';
$("tr[pid$="+parentId+"]").removeAttr("style");
$("tr[pid$="+parentId+"]").attr("open", true);
}
}
後端介面返回值示例
{
"code": "200",
"msg": "操作成功",
"data": [
{
"id": "1",
"level": 1,
"className": "智慧財產權服務",
"parentId": null,
"childrenServiceClasses": [
{
"id": "11",
"level": 2,
"className": "智慧財產權分析評議",
"parentId": "1"
},
{
"id": "12",
"level": 2,
"className": "專利維權",
"parentId": "1"
},
{
"id": "13",
"level": 2,
"className": "價值評估",
"parentId": "1"
},
{
"id": "34",
"level": 2,
"className": "專利質押保險",
"parentId": "1"
}
]
},
{
"id": "5",
"level": 1,
"className": "創新創業服務",
"parentId": null,
"childrenServiceClasses": [
{
"id": "25",
"level": 2,
"className": "企業創新能力診斷",
"parentId": "5"
},
{
"id": "31",
"level": 2,
"className": "創業導師服務",
"parentId": "5"
}
]
},
{
"id": "6",
"level": 1,
"className": "科技金融服務",
"parentId": null,
"childrenServiceClasses": [
{
"id": "28",
"level": 2,
"className": "科創板培育",
"parentId": "6"
},
{
"id": "33",
"level": 2,
"className": "高企財稅規劃",
"parentId": "6"
}
]
}
]
}
相關文章
- Android自定義View——從零開始實現可展開收起的水平選單欄AndroidView
- jQuery實現的表格展開伸縮效果例項jQuery
- 基於Vue實現可以拖拽排序的樹形表格(已開源)Vue排序
- 基於vue.js實現樹形表格的封裝Vue.js封裝
- antd 自定義展開表格
- jquery 實現的摺疊展開的選單jQuery
- jQuery zTree 展示樹形表格jQuery
- jQuery點選展開收起程式碼例項jQuery
- JavaScript段落展開收起效果JavaScript
- 基於jquery-treeview的動態選單實現jQueryView
- 基於jquery實現穿梭框效果jQuery
- 突發奇想!藉助CSS自定義彩色字型來實現多行文字展開收起CSS
- jQuery多級樹形選單詳解jQuery
- vue實現展開全部,收起全部Vue
- jQuery實現的自定義可以拖動的彈出層效果jQuery
- jQuery實現的滑鼠滑過連結出現自定義提示效果jQuery
- jQuery實現的滑鼠懸浮和選中實現表格行背景變色效果jQuery
- 自定義View:側滑選單實現View
- 點選平滑下拉展開摺疊樹形導航選單
- 文字超長,實現展開收起功能...
- js自定義select下拉選單效果JS
- jQuery實現的點選展開其他專案摺疊導航選單jQuery
- 點選右則剪頭展開和收起頁面選單
- 【Android初級】如何實現一個有動畫效果的自定義下拉選單Android動畫
- jquery.cityselect.js基於jQuery+JSON的省市或自定義聯動效果jQueryJSON
- 自定義View:側滑選單動畫實現View動畫
- 自定義通過PopupWindow實現通用選單
- Vue遞迴元件實現樹形結構選單Vue遞迴元件
- WPF實現樹形下拉選單框(TreeComboBox)
- vue基於Element構建自定義樹Vue
- jquery和css實現的圓形鐘錶效果jQueryCSS
- 利用自定義流程表單開發的優勢,實現流程化發展!
- 自定義實現MIUI的拖動視差效果(阻尼效果)UI
- 文章點選展開和收起詳解
- vue中elementUI的表格實現自定義編輯VueUI
- jQuery 實現checkBox全選效果jQuery
- 自定義ViewGroup,實現Android的側滑選單ViewAndroid
- 求助:用什麼方法來實現這樣的樹形選單?