Bootstrap table 實現樹形表格,實現聯動選中,聯動取消

来源:https://www.cnblogs.com/jiajiamiao/archive/2019/09/29/11606782.html
-Advertisement-
Play Games

公司最近有需求要做樹形式table。因為是前後端不分離項目,且之前已經引入了bootstrap table插件,現把實現方式分享一下: <!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta charset="utf-8" /> <meta http-equ ...


公司最近有需求要做樹形式table。因為是前後端不分離項目,且之前已經引入了bootstrap table插件,現把實現方式分享一下:

<!DOCTYPE HTML> <html lang="zh-cn">
<head>     <meta charset="utf-8" />     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta content="width=device-width,initial-scale=1.0" name="viewport">     <meta content="yes" name="apple-mobile-web-app-capable">     <meta content="black" name="apple-mobile-web-app-status-bar-style">     <meta content="telephone=no" name="format-detection">     <meta content="email=no" name="format-detection">     <title>系統管理</title>     <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">     <link href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet">     <link rel="stylesheet" href="https://cdn.bootcss.com/jquery-treegrid/0.2.0/css/jquery.treegrid.min.css"> </head>
<body> <div class="container">     <h1>樹形表格 : Table Treegrid</h1>     <table id="table"></table>     <br/>     <button onclick="test()">選擇</button> </div> </body> <script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap-table/1.12.1/bootstrap-table.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap-table/1.12.0/extensions/treegrid/bootstrap-table-treegrid.js"></script> <script src="https://cdn.bootcss.com/jquery-treegrid/0.2.0/js/jquery.treegrid.min.js"></script> <script type="text/javascript">     var $table = $('#table');     var data = [{0: undefined, id: 94710, pid: 0, mode: "系統管理", permissionTag: "*", permissionMark: "所有許可權", } ,{0: undefined, id: 94711, pid: 94710, mode: "營銷中心管理", permissionTag: "*", permissionMark: "所有許可權",} ,{0: undefined, id: 471104, pid: 94711, mode: "營銷中心管理", permissionTag: "search", permissionMark: "查詢",} ,{0: undefined, id: 94721, pid: 94710, mode: "工廠管理", permissionTag: "*", permissionMark: "所有許可權", } ,{0: undefined, id: 472104, pid: 94721, mode: "工廠管理", permissionTag: "search", permissionMark: "查詢", } ,{0: undefined, id: 94731, pid: 94710, mode: "經銷商管理", permissionTag: "*", permissionMark: "所有許可權", } ,{0: undefined, id: 473104, pid: 94731, mode: "經銷商管理", permissionTag: "search", permissionMark: "查詢", } ,{0: undefined, id: 94732, pid: 94710, mode: "產品管理", permissionTag: "*", permissionMark: "所有許可權", } ,{0: undefined, id: 473201, pid: 94732, mode: "產品管理", permissionTag: "insert", permissionMark: "添加", } ,{0: undefined, id: 473202, pid: 94732, mode: "產品管理", permissionTag: "update", permissionMark: "修改", } , {0: undefined, id: 473203, pid: 94732, mode: "產品管理", permissionTag: "delete", permissionMark: "刪除", } , {0: undefined, id: 473204, pid: 94732, mode: "產品管理", permissionTag: "search", permissionMark: "查詢", } , {0: undefined, id: 94741, pid: 94710, mode: "用戶賬號", permissionTag: "*", permissionMark: "所有許可權", } , {0: undefined, id: 474101, pid: 94741, mode: "用戶賬號", permissionTag: "insert", permissionMark: "添加", } , {0: undefined, id: 474102, pid: 94741, mode: "用戶賬號", permissionTag: "update", permissionMark: "修改", } , {0: undefined, id: 474103, pid: 94741, mode: "用戶賬號", permissionTag: "delete", permissionMark: "刪除", } , {0: undefined, id: 474104, pid: 94741, mode: "用戶賬號", permissionTag: "search", permissionMark: "查詢", } , {0: undefined, id: 474105, pid: 94741, mode: "用戶賬號", permissionTag: "resetPwd", permissionMark: "重置密碼", } , {0: undefined, id: 94742, pid: 94710, mode: "角色許可權管理", permissionTag: "*", permissionMark: "所有許可權", } , {0: undefined, id: 474201, pid: 94742, mode: "角色許可權管理", permissionTag: "insert", permissionMark: "添加", } , {0: undefined, id: 474202, pid: 94742, mode: "角色許可權管理", permissionTag: "update", permissionMark: "修改", } , {0: undefined, id: 474203, pid: 94742, mode: "角色許可權管理", permissionTag: "delete", permissionMark: "刪除", } , {0: undefined, id: 474204, pid: 94742, mode: "角色許可權管理", permissionTag: "search", permissionMark: "查詢", } , {0: undefined, id: 94760, pid: 0, mode: "運營中心", permissionTag: "*", permissionMark: "所有許可權", } , {0: undefined, id: 94770, pid: 94760, mode: "跨區域調撥單", permissionTag: "*", permissionMark: "所有許可權", } , {0: undefined, id: 476104, pid: 94770, mode: "跨區域調撥單", permissionTag: "search", permissionMark: "查詢", } , {0: undefined, id: 476105, pid: 94770, mode: "跨區域調撥單", permissionTag: "download", permissionMark: "下載", }]
    $(function() {
        //控制台輸出一下數據         console.log(data);
        $table.bootstrapTable({             data:data,             idField: 'id',             dataType:'jsonp',             columns: [                 { field: 'check',  checkbox: true, formatter: function (value, row, index) {                         if (row.check == true) {                            // console.log(row.serverName);                             //設置選中                             return {  checked: true };                         }                     }                 },                 { field: 'mode',  title: '名稱' },                 { field: 'permissionTag',  title: '狀態',  },                 { field: 'permissionMark', title: '許可權值'  },             ],             // bootstrap-table-treegrid.js 插件配置 -- start             //在哪一列展開樹形             treeShowField: 'mode',             //指定父id列             parentIdField: 'pid',
            onResetView: function(data) {                 //console.log('load');                 $table.treegrid({                     // initialState: 'collapsed',// 所有節點都摺疊                     initialState: 'expanded',// 所有節點都展開,預設展開                     treeColumn: 1,                     // expanderExpandedClass: 'glyphicon glyphicon-minus',  //圖標樣式                     // expanderCollapsedClass: 'glyphicon glyphicon-plus',                     onChange: function() {                         $table.bootstrapTable('resetWidth');                     }                 });                 //只展開樹形的第一級節點                 $table.treegrid('getRootNodes').treegrid('expand');             },             onCheck:function(row){               event.preventDefault()                 var datas = $table.bootstrapTable('getData');                 console.log(datas)                 row.check = true                 // 勾選子類                 selectChilds(datas,row,"id","pid",true);                 // 勾選父類                 selectParentChecked(datas,row,"id","pid")
                // 刷新數據                 $table.bootstrapTable('load', datas);             },
            onUncheck:function(row){               event.preventDefault()               row.check = false                 var datas = $table.bootstrapTable('getData');                 selectChilds(datas,row,"id","pid",false);                 //取消選中最後一個子元素時時查找對應父元素取消                 selectParentUnchecked(datas,row,"id","pid")                 $table.bootstrapTable('load', datas);             },             // bootstrap-table-treetreegrid.js 插件配置 -- end         });     });
    </script> <script>     /**      * 選中父項時,同時選中子項      * @param datas 所有的數據      * @param row 當前數據      * @param id id 欄位名      * @param pid 父id欄位名      */     function selectChilds(datas,row,id,pid,checked) {       console.log("zi",datas,'row',row,'check',checked)         for(var i in datas){             if(datas[i][pid] == row[id]){                 datas[i].check=checked;                 selectChilds(datas,datas[i],id,pid,checked);             };         }     }
    function selectParentUnchecked(datas,row,id,pid){       console.log("fu--Uncheck",datas,'row',row,)       let key = 0;       for(var i in datas){         if(datas[i].pid == row.pid && datas[i].check == true){           key++         }       }       console.log(key)       if(key == 0 ){         for(var i in datas){           if(datas[i][id] == row[pid]){             datas[i].check=false;             selectParentUnchecked(datas,datas[i],id,pid);           }         }       }     }
    function selectParentChecked(datas,row,id,pid){         for(var i in datas){             if(datas[i][id] == row[pid]){                 datas[i].check=true;                 selectParentChecked(datas,datas[i],id,pid);             };         }     }
    function test() {         var selRows = $table.bootstrapTable("getSelections");         if(selRows.length == 0){             alert("請至少選擇一行");             return;         }         var postData = "";         $.each(selRows,function(i) {             postData +=  this.id;             if (i < selRows.length - 1) {                 postData += ", ";             }         });         alert("你選中行的 id 為:"+postData);     } </script> </html>     實現的效果圖為:
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ES6 新增加了兩個重要的 JavaScript 關鍵字 :let 和 const 先說一下 const :它用於聲明一個只讀的常量,一旦聲明,常量的值就不能改變。 由於const聲明的是一個只讀變數,不可被改變,所以聲明變數是就必須賦值,否自也會報錯。 要註意的是用const聲明的常量如果是一個 ...
  • 1、選擇第一級子節點 通過> 或者children方法實現 $('#XtraTabPage8>.datagrid-ftable') $('#XtraTabPage8').children('.datagrid-ftable') 2、選擇所有的子節點,即後代節點 通過空格實現 $('#XtraTabP ...
  • 1、form表單常用屬性練習 得到的效果是: ...
  • Cookie Cookie 是一種非常基礎的客戶端存儲方式,得到廣泛的支持 創建多個 cookie 的方法 當創建多個 cookie 時只能像這樣一個一個地創建,無法一次性創建多個 同一名字的 cookie 只能存在一個,因此再創建一個同名 cookie 相當於修改原有的 cookie 此時名為 的 ...
  • js的抖動 在 js 中 改變視窗大小 & 上下滾動滾動條 & 反覆向輸入框中輸入內容 ... , 如果綁定了相應的事件 , 這些事件的觸發頻率非常高, 嚴重影響用戶體驗和伺服器的性能 , 這種問題 在js中 就叫 js 的抖動 . 解決方法 : 防抖 & 節流 js的防抖 就是在 觸發事件 中設置 ...
  • 1、圖片和多媒體 (1) 圖片:img元素 src 屬性:圖片路徑; alt 屬性:圖片無法顯示時使用的替代文字; title:滑鼠懸停時顯示的文字 ; (2) 視頻:video元素 src 屬性:視頻路徑 ; controls 屬性:【布爾屬性】指定後,會顯示播放控制項; autoplay :【布爾 ...
  • axios是一個基於Promise 用於瀏覽器和 nodejs 的 HTTP 客戶端,它可以在瀏覽器和node環境下運行,在github上已經有六七萬個星了,axios使用很方便,很多人在使用他,vue官方也推薦使用axios了,技術這東西還是隨主流吧,大家都用肯定有它的特長所在。 axios現在最 ...
  • 因為bootstrap自帶的固定列效果滿足不了公司需求,所以藉助fixed-table這個插件完成了iview固定列的效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>左右兩側固定列,中間內容可以橫向 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...