/* Ver 1.5.2 ★ 標籤語法: 變數使用方式預設為:@變數名稱 @物件名稱-變數名稱 {@變數名稱} {@物件名稱-變數名稱} 等四種方式,也可自由定義 範例:@row @tablename-row {@row} {@tablename-row} tbl-repeat="物件名稱" ※ 在需要複製的 DOM 物件上加上此標籤,可添加在複數物件上,物件之間必須緊貼並具連續性, 以防止建立 DOM 時產生錯位的問題,帶參數時請使用 "@變數名稱" 或是 "@物件名稱-變數名稱" 帶入, 範例如下: @row @value tbl-build="物件名稱-NoData" ※ 當查無資料時,所顯示之物件,此為唯一物件,範例如下: 查無資料 tbl-build="物件名稱-PageDrop" ※ 換頁下拉選單容器,此為唯一物件,範例:
tbl-build="物件名稱-PerDrop" ※ 每頁筆數下拉選單容器,此為唯一物件,範例:
tbl-build="物件名稱-Count" ※ 查詢到的資料總筆數,此為唯一物件,範例: tbl-build="物件名稱-RunBtn" ※ 執行按鈕,可複數添加,範例如下: tbl-keep="物件名稱-Enter" ※ 用於監視輸入欄位,在按下 Enter 時自動執行查詢功能,可複數添加,範例如下: tbl-keep="物件名稱-CheckAll" ※ 用於流水號全選(勾選)元件的監視與功能響應,僅可用於流水號操作,範例如下: tbl-keep="物件名稱-CheckBox" ※ 用於流水號勾選元件的監視,僅可用於流水號操作,亦可用於單選 (radio),範例如下: tbl-show="判斷式" ※ 此為全域判斷功能,也可帶入函數使用回傳 true 或 false 即可, 若需要判斷之變數格式為字串,必須在頭尾加上 ' 符號,範例如下: @string =================================================================================================================================== ★ 調用函數: 定義列表套件 > TableListBuild({ 設定參數 }) ※ 設定參數在下一階段說明 執行查詢 > TableListRun('物件名稱') ※ 定義列表套件完成時就會自動執行 前往指定頁數 > TableListSetPage('物件名稱',頁數) ※ 若超過最大頁數,就會到最後一頁 取得指定位置資料 > TableListGetItem('物件名稱', @index) ※ 取得單筆資料,@index 也可為 @物件名稱-index (提供按鈕傳輸資料所使用) 取得當前所勾選的資料 > var array = TableListGetCheck('物件名稱') ※ 資料以陣列 (array) 形式回傳 執行全域顯示判斷 > TableListApply() ※ 配合 tbl-show 所使用,通常放在 OnEnd 函數中做使用 =================================================================================================================================== ★ 設定參數 (*為必填): *物件名稱 Name ※ 輸入字串名稱 *取得查詢參數 GetSearch ※ 請帶 function (ReSearch) { 還需判斷Recover功能之套用詳見範例 return Search; } 此處 ReSearch 等同於 Search 參數 *取得資料總筆數 GetCount ※ 請帶 function (Option) { return Count; } 此處 Option 變數僅包含 Search 參數 執行 Ajax 時請使用同步調用 (async = false) *執行資料撈取 GetData ※ 請帶 function (Option) { return DataArray; } 此處 Option 變數包含 Offset、Fetch、NowPage、PerPage、Search 等參數 執行 Ajax 時請使用同步調用 (async = false) 回傳之 DataArray 陣列中資料須保留變數名稱供套件使用:{@row}、{@index} 開始執行函數 OnStart ※ 請帶 function () { } 結束執行函數 OnEnd ※ 請帶 function () { } 起始所在頁數 NowPage (預設:1) ※ 若開啟 Recover 功能則此設定會優先 Recover 紀錄之參數 預設每頁筆數 PerPage (預設:10) ※ 若開啟 Recover 功能則此設定會優先 Recover 紀錄之參數 狀態還原功能開關 Recover (預設:false) ※ 若開啟則使用者在返回頁面的時候會還原上一次的查詢狀態 檢查總筆數是否正確 CountCheck (預設:true) ※ 檢查 Count 總筆數是否正確 若不正確就同步 自定義換頁文字 PageFormat (預設:'第 Page 頁') ※ 其中 Page 為固定參數不可移除 自定義每頁文字 PerFormat (預設:'每頁顯示 Per 筆') ※ 其中 Per 為固定參數不可移除 設定每頁筆數結構 PerSet (預設:[10, 20, 30, 50, 100, 200, 500, 1000]) 自定義套用語法格式 StrFormat (預設:[{ Start: '{@', End: '}' }, { Start: '@', End: '' }]) ※ 請注意陣列中之自定義語法,必須由複雜至精簡,才能正常運作 =================================================================================================================================== ★ 定義語法範例: ( 請注意於內部函數所執行之 Ajax 都必須以同步方式執行 async = false ) TableListBuild({ Name: '變數名稱', NowPage: 1, PerPage: 10, PageFormat: '第 Page 頁', PerFormat: '每頁顯示 Per 筆', PerSet: [10, 20, 30, 50, 100, 200, 500, 1000], Recover: true, OnStart: function () { //自動執行前執行之函數 //執行讀取動畫 (範例) NProgress.start(); }, GetSearch: function (ReSearch) { //開啟 Recover 功能時需要將記錄的資料套用回介面上的物件 if (ReSearch) { $('#KeyWord').val(ReSearch.KeyWord); $('#KeyWord2').val(ReSearch.KeyWord2); } //讀取介面上的物件數值傳送到 Search 變數之中 var Search = { KeyWord: $('#KeyWord').val(), KeyWord2: $('#KeyWord2').val(), } return Search; }, GetCount: function (Option) { //執行讀取動畫 (範例) NProgress.start(); //設定Ajax要傳輸的資料 (此處須包含 Search 參數才會撈出正確的總筆數) var tempData = { Type: 'GetCount', KeyWord: Option.Search.KeyWord, KeyWord2: Option.Search.KeyWord2, }; var Count = tools.ajax(tempData, ashxPath).Count; return Count; }, GetData: function (Option) { //執行讀取動畫 (範例) NProgress.start(); //設定Ajax要傳輸的資料 (其中 Offset、Fetch 為 SQL 查詢資料時所需要之參數 ) var tempData = { Type: 'GetData', Offset: Option.Offset, Fetch: Option.Fetch, KeyWord: Option.Search.KeyWord, KeyWord2: Option.Search.KeyWord2, }; var DataArray = tools.ajax(tempData, ashxPath).Data; return DataArray; }, OnEnd: function () { //完成查詢時所執行之回調函數放此處 //結束讀取動畫 (範例) NProgress.done(); }, }); =================================================================================================================================== */ //宣告專用變數儲存物件 var TableListTempData = {}; //資料驗證/定義預設值/型態檢查 TableListSettingCheck = function (Setting) { Setting.Success = true; //必填項目檢查 if (!Setting) { console.info('缺乏參數[Setting]設定!'); Setting.Success = false; }; if (!Setting.Name) { console.info('缺乏參數[Name]設定!'); Setting.Success = false; }; if (!Setting.GetCount) { console.info('缺乏函數[GetCount]設定!'); Setting.Success = false; }; if (!Setting.GetSearch) { console.info('缺乏函數[GetSearch]設定!'); Setting.Success = false; }; if (!Setting.GetData) { console.info('缺乏函數[GetData]設定!'); Setting.Success = false; }; //定義預設值 Setting.DataArray = Setting.DataArray ? Setting.DataArray : []; //撈取資料前先套用空白資料陣列 Setting.Count = Setting.Count ? Setting.Count : 0; //撈取資料前先套用 0 Setting.AllPage = Setting.AllPage ? Setting.AllPage : 1; //撈取資料前先套用 1 Setting.DomHtml = Setting.DomHtml ? Setting.DomHtml : {}; //撈取資料前先套用空白物件 Setting.Option = Setting.Option ? Setting.Option : {}; //撈取資料前先套用空白物件 Setting.Search = Setting.Search ? Setting.Search : null; //撈取資料前先套用空值 Setting.NowPage = Setting.NowPage ? Setting.NowPage : 1; //起始所在頁數 Setting.PerPage = Setting.PerPage ? Setting.PerPage : 10; //預設每頁筆數 Setting.PageFormat = Setting.PageFormat ? Setting.PageFormat : '第 Page 頁'; //自定義 換頁文字 Setting.PerFormat = Setting.PerFormat ? Setting.PerFormat : '每頁顯示 Per 筆'; //自定義 每頁文字 Setting.PerSet = Setting.PerSet ? Setting.PerSet : [10, 20, 30, 50, 100, 200, 500, 1000]; //設定每頁筆數結構 Setting.Recover = Setting.Recover ? Setting.Recover : false; //紀錄查詢及換頁狀態 Setting.CountCheck = Setting.CountCheck == true ? Setting.CountCheck : false; //檢查 Count 總筆數是否正確 若不正確就同步 //定義預設值 自定義 套用語法格式 Setting.StrFormat = Setting.StrFormat ? Setting.StrFormat : [ { Start: '{@', End: '}' }, { Start: '@', End: '' }, ]; //型態檢查 if (typeof (Setting) != 'object') { console.info('參數[Setting]格式錯誤!必須為 object'); Setting.Success = false; }; if (typeof (Setting.Name) != 'string') { console.info('參數[Name]格式錯誤!必須為 string'); Setting.Success = false; }; if (typeof (Setting.GetCount) != 'function') { console.info('函數[GetCount]格式錯誤!必須為 function'); Setting.Success = false; }; if (typeof (Setting.GetSearch) != 'function') { console.info('函數[GetSearch]格式錯誤!必須為 function'); Setting.Success = false; }; if (typeof (Setting.GetData) != 'function') { console.info('函數[GetData]格式錯誤!必須為 function'); Setting.Success = false; }; if (typeof (Setting.NowPage) != 'number') { console.info('參數[NowPage]格式錯誤!必須為 number'); Setting.Success = false; }; if (typeof (Setting.PerPage) != 'number') { console.info('參數[PerPage]格式錯誤!必須為 number'); Setting.Success = false; }; if (typeof (Setting.PageFormat) != 'string') { console.info('參數[PageFormat]格式錯誤!必須為 string'); Setting.Success = false; }; if (typeof (Setting.PerFormat) != 'string') { console.info('參數[PerFormat]格式錯誤!必須為 string'); Setting.Success = false; }; if (typeof (Setting.PerSet) != 'object') { console.info('參數[PerSet]格式錯誤!必須為 array'); Setting.Success = false; }; if (typeof (Setting.Recover) != 'boolean') { console.info('參數[PerSet]格式錯誤!必須為 boolean'); Setting.Success = false; }; if (typeof (Setting.CountCheck) != 'boolean') { console.info('參數[CountCheck]格式錯誤!必須為 boolean'); Setting.Success = false; }; //下拉選單ID設定 Setting.PageDropID = Setting.PageDropID ? Setting.PageDropID : 'TableList_' + Setting.Name + '_PageDrop'; Setting.PerDropID = Setting.PerDropID ? Setting.PerDropID : 'TableList_' + Setting.Name + '_PerDrop'; //恢復記錄過的資料 ( Recover相關 ) if (Setting.Recover == true && TableListRecoverLoad(Setting.Name) != null) { var StorageLoad = TableListRecoverLoad(Setting.Name); Setting.Count = StorageLoad.Count; Setting.AllPage = StorageLoad.AllPage; Setting.NowPage = StorageLoad.NowPage; Setting.PerPage = StorageLoad.PerPage; } return Setting; }; //定義物件 TableListBuild = function (Setting) { //等待所有 js 檔案完全執行完畢才開始定義 防止跟其他架框模組相衝 (angularjs) $(function () { //資料驗證 Setting = TableListSettingCheck(Setting); if (Setting.Success == false) { return; } //轉換替代名稱 var Name = Setting.Name; //存入資料物件矩陣 TableListTempData[Name] = Setting; //取得 Name 物件 DOM 的 Html (顯示判斷執行過查詢後才跑) var tempXPath = TableListGetXPath('repeat', Name, null); TableListGetDomHtml(Name, 'Data', tempXPath); //取得 NoData 擴充物件 DOM 的 Html (顯示判斷執行過查詢後才跑) tempXPath = TableListGetXPath('build', Name, 'NoData'); TableListGetDomHtml(Name, 'NoData', tempXPath); //擴充物件 PageDrop 建立 TableListPluginPageDrop(Name); //擴充物件 PerDrop 建立 TableListPluginPerDrop(Name); //預先套用資料筆數 (這樣在執行前畫面的筆數上才不會出現空白無資料) tempXPath = TableListGetXPath('build', Name, 'Count'); $(tempXPath).html(TableListTempData[Name].Count); //設置查詢按鈕 onclick 事件 tempXPath = TableListGetXPath('build', Name, 'RunBtn'); $(tempXPath).attr('onclick', "TableListRun('" + Name + "')"); //勾選元件 CheckAll 全選按鈕 onchange 事件 tempXPath = TableListGetXPath('keep', Name, 'CheckAll'); $(tempXPath).attr('onchange', "TableListCheckAll('" + Name + "')"); //設置鍵盤監視 (用在關鍵字查詢時的 Enter 事件) tempXPath = TableListGetXPath('keep', Name, 'Enter'); $(tempXPath).keyup(function (event) { if (event.keyCode == 13) { TableListRun(Name); } }); //執行開始函數 if (typeof (TableListTempData[Name].OnStart) == 'function') { TableListTempData[Name].OnStart(); } //主動執行 TableListRun(Name, 'First'); }); }; //執行查詢 TableListRun = function (Name, Type) { //換頁、切換每頁筆數 執行時,不執行取得總筆數(GetCount)以及關鍵字取得的函數(GetSearch) if (Type != 'DropSkip') { //取得查詢條件 若啟動 Recover 功能 則提供上一次的 Option.Search 紀錄 ( Recover相關 ) if (Type == 'First' && TableListTempData[Name].Recover == true && TableListRecoverLoad(Name) != null) { TableListTempData[Name].Search = TableListTempData[Name].GetSearch(TableListRecoverLoad(Name).Search); } else { TableListTempData[Name].Search = TableListTempData[Name].GetSearch(); } ////執行函數 取得總筆數 (提供 Search 參數) //TableListTempData[Name].Count = TableListTempData[Name].GetCount({ // Search: TableListTempData[Name].Search, //}); //正常查詢 非首次執行 且不是指定換頁時 需要強迫返回第1頁 ( Recover相關 ) if (Type != 'First' && Type != 'SetPage') { TableListTempData[Name].NowPage = 1; } } //執行函數 取得總筆數 (提供 Search 參數) TableListTempData[Name].Count = TableListTempData[Name].GetCount({ Search: TableListTempData[Name].Search, }); //判斷是否超過最大頁數 超過就到最後一頁 if (TableListTempData[Name].NowPage > TableListTempData[Name].AllPage) { TableListTempData[Name].NowPage = TableListTempData[Name].AllPage; } //執行資料撈取 (提供 Option 變數) TableListTempData[Name].Option = { Offset: (TableListTempData[Name].NowPage - 1) * TableListTempData[Name].PerPage, Fetch: TableListTempData[Name].PerPage, NowPage: TableListTempData[Name].NowPage, PerPage: TableListTempData[Name].PerPage, //AllPage: TableListTempData[Name].AllPage, //Count: TableListTempData[Name].Count, Search: TableListTempData[Name].Search, }; TableListTempData[Name].DataArray = TableListTempData[Name].GetData(TableListTempData[Name].Option); //套用保留變數 ( 同時記錄最大的 row 讓後面的 Count 可以驗證 ) var maxRow = 0; for (var i = 0; i < TableListTempData[Name].DataArray.length; i++) { TableListTempData[Name].DataArray[i]['row'] = (TableListTempData[Name].NowPage * TableListTempData[Name].PerPage) + (i + 1) - TableListTempData[Name].PerPage; TableListTempData[Name].DataArray[i]['index'] = i; //記錄最大的 row maxRow = TableListTempData[Name].DataArray[i]['row']; } //再次檢查 Count 總筆數是否正確 若不正確就同步 if (maxRow > TableListTempData[Name].Count && TableListTempData[Name].CountCheck == true) { TableListTempData[Name].Count = maxRow; } //套用資料總筆數 tempXPath = TableListGetXPath('build', Name, 'Count'); $(tempXPath).html(TableListTempData[Name].Count); //計算頁數 TableListTempData[Name].AllPage = Math.ceil(TableListTempData[Name].Count / TableListTempData[Name].PerPage) TableListTempData[Name].AllPage = TableListTempData[Name].AllPage == 0 ? 1 : TableListTempData[Name].AllPage; //擴充物件 PageDrop 建立 TableListPluginPageDrop(Name); //擴充物件 PerDrop 建立 TableListPluginPerDrop(Name); //渲染 DomHtml 函數 TableListDomHtmlBuild(Name); //儲存查詢操作狀態 (不管有沒有開啟都記錄 才可以動態修改) TableListRecoverSave(Name); //擴充物件 NoData 顯示判斷 TableListPluginNoData(Name); //還原勾選元件 CheckAll 的勾選狀態 var EvenTag = TableListGetXPath('keep', Name, 'CheckAll'); $(EvenTag).prop('checked', false); //執行結束函數 if (typeof (TableListTempData[Name].OnEnd) == 'function') { TableListTempData[Name].OnEnd(); } }; //前往指定頁數 TableListSetPage = function (Name, Page) { //更改換頁下拉選單資訊 DropListSet(TableListTempData[Name].PageDropID, [Page]); TableListTempData[Name].NowPage = Page; //執行查詢 TableListRun(Name, 'SetPage'); }; //渲染 DomHtml 函數 TableListDomHtmlBuild = function (Name) { //先移除物件 (才不會重複置入) var tempXPath = TableListGetXPath('repeat', Name, null); $(tempXPath).remove(); tempXPath = TableListGetXPath('build', Name, 'NoData'); $(tempXPath).remove(); //渲染資料陣列到畫面上 (取得父容器位置) var EvenTag = TableListGetParentXPath('Data', Name); //迴圈 資料陣列 for (var d = 0; d < TableListTempData[Name].DataArray.length; d++) { //迴圈 DomHtml 模組 for (var m = 0; m < TableListTempData[Name].DomHtml.Data.length; m++) { //擷取 Html var tempHtml = TableListTempData[Name].DomHtml.Data[m]; //過濾資料陣列變數 var tempStr = []; for (var str in TableListTempData[Name].DataArray[d]) { tempStr.push({ Str: str, Length: str.length, }); } //文字排序 由長至短 tempStr.sort(function (a, b) { return b['Length'] - a['Length']; }); //迴圈 資料陣列變數 for (var i = 0; i < tempStr.length; i++) { //取出資料名稱 var str = tempStr[i].Str; for (var s = 0; s < TableListTempData[Name].StrFormat.length; s++) { //取出頭尾取代字串 var start = TableListTempData[Name].StrFormat[s].Start; var end = TableListTempData[Name].StrFormat[s].End; //製作標籤 (單純的標籤,例如:{@row}) var regex = new RegExp(start + str + end, 'g'); //取代資料 tempHtml = tempHtml.replace(regex, TableListTempData[Name].DataArray[d][str]); //製作標籤 (複合式標籤,例如:{@物件名稱-row}) regex = new RegExp(start + Name + '-' + str + end, 'g'); //取代資料 tempHtml = tempHtml.replace(regex, TableListTempData[Name].DataArray[d][str]); } } //推入資料 $(EvenTag).append(tempHtml); } } }; //擴充物件 NoData 顯示判斷 TableListPluginNoData = function (Name) { //使用 XPath 選取 DOM 物件 (包含父容器) var ParentEvenTag = TableListGetParentXPath('NoData', Name); var EvenTag = TableListGetXPath('build', Name, 'NoData'); if (TableListTempData[Name].DataArray.length == 0) { $(ParentEvenTag).append(TableListTempData[Name].DomHtml.NoData); } else { $(EvenTag).remove(); } }; //擴充物件 PageDrop 建立 TableListPluginPageDrop = function (Name) { //使用 XPath 選取 DOM 物件 var EvenTag = TableListGetXPath('build', Name, 'PageDrop'); if ($(EvenTag).length == 0) { return; } //容器設定 (須配合套件 _dropdown2.js) $(EvenTag).attr('id', TableListTempData[Name].PageDropID); $(EvenTag).addClass('DropList'); //若超過300頁 就開啟查詢優先模式 var TempSearchPriority = false; if (TableListTempData[Name].AllPage >= 300) { TempSearchPriority = true; } //取得自定義文字設定 var TempFormat = TableListTempData[Name].PageFormat.split('Page'); var TempFormatA = ''; var TempFormatB = ''; TempFormatA = TempFormat[0]; TempFormatB = TempFormat[1]; //製作下拉選單變數 var TempData = [{ Optgroup: '', Option: [] }]; for (var i = 0; i < TableListTempData[Name].AllPage; i++) { TempData[0].Option.push({ Text: TempFormatA + (i + 1) + TempFormatB, Val: (i + 1) }); } ////超過300頁 就開啟群組模式 --- 暫時不使用 //var CheckGroupList = false; //var TempData = []; //if (TableListTempData[Name].AllPage >= 300) { // // //超過300筆就使用群組分組 // CheckGroupList = true; // // var tempRange = 100; // var tempCount = Math.ceil(TableListTempData[Name].AllPage / tempRange); // // for (var g = 1; g <= tempCount; g++) { // // var tempStart = g * tempRange - tempRange + 1; // var tempEnd = ((g + 1) * tempRange - tempRange) >= TableListTempData[Name].AllPage ? TableListTempData[Name].AllPage : ((g + 1) * tempRange - tempRange); // // var tempOption = []; // for (var i = 0; i < TableListTempData[Name].AllPage; i++) { // if ((i + 1) >= tempStart && (i + 1) <= tempEnd) { // tempOption.push({ // Text: TempFormatA + (i + 1) + TempFormatB, // Val: (i + 1) // }); // } // } // // TempData.push({ // Optgroup: tempStart + ' 至 ' + tempEnd, // Option: tempOption // }) // // } // //} else { // // //沒超過就正常套用 // TempData = [{ Optgroup: '', Option: [] }]; // for (var i = 0; i < TableListTempData[Name].AllPage; i++) { // TempData[0].Option.push({ // Text: TempFormatA + (i + 1) + TempFormatB, // Val: (i + 1) // }); // } // //} //建立下拉選單 DropListSetting({ ID: TableListTempData[Name].PageDropID, Data: TempData, Select: [TableListTempData[Name].NowPage], Class: 'button btn_white', ArrowChange: true, ArrowClass: 'button btn_white', Search: true, //GroupList: CheckGroupList, //GroupListStart: CheckGroupList, SearchPriority: TempSearchPriority, OnEnd: function (Select) { //套用資料 TableListTempData[Name].NowPage = Select[0]; //執行 Run 函數 (換頁也必須跑 GetCount 不然可能跟真實資料有差異) TableListRun(Name, 'DropSkip'); } }); }; //擴充物件 PerDrop 建立 TableListPluginPerDrop = function (Name) { //使用 XPath 選取 DOM 物件 var EvenTag = TableListGetXPath('build', Name, 'PerDrop'); if ($(EvenTag).length == 0) { return; } //容器設定 (須配合套件 _dropdown2.js) $(EvenTag).attr('id', TableListTempData[Name].PerDropID); $(EvenTag).addClass('DropList'); //取得自定義文字設定 var TempFormat = TableListTempData[Name].PerFormat.split('Per'); var TempFormatA = ''; var TempFormatB = ''; TempFormatA = TempFormat[0]; TempFormatB = TempFormat[1]; //製作下拉選單變數 var TempData = [{ Optgroup: '', Option: [] }]; for (var i = 0; i < TableListTempData[Name].PerSet.length; i++) { TempData[0].Option.push({ Text: TempFormatA + TableListTempData[Name].PerSet[i] + TempFormatB, Val: TableListTempData[Name].PerSet[i] }); } //檢查 PerPage 是否有在 PerSet 設定之中 var tempCheck = false; for (var i = 0; i < TableListTempData[Name].PerSet.length; i++) { if (TableListTempData[Name].PerPage == TableListTempData[Name].PerSet[i]) { tempCheck = true; break; } } TableListTempData[Name].PerPage = tempCheck ? TableListTempData[Name].PerPage : TableListTempData[Name].PerSet[0] //建立下拉選單 DropListSetting({ ID: TableListTempData[Name].PerDropID, Data: TempData, Select: [TableListTempData[Name].PerPage], Class: 'button btn_white', OnEnd: function (Select) { //回到第一頁 TableListTempData[Name].NowPage = 1; //套用資料 TableListTempData[Name].PerPage = Select[0]; //執行 Run 函數 TableListRun(Name, 'DropSkip'); } }); }; //使用 XPath 選取 DOM 物件函數 TableListGetXPath = function (Mode, Name, XPath) { var tempXPath = XPath ? '-' + XPath : ''; var EvenTag = "[tbl-" + Mode + "='" + Name + tempXPath + "'],[data-tbl-" + Mode + "='" + Name + tempXPath + "']"; return EvenTag; }; //使用 XPath 選取父容器 DOM 物件函數 TableListGetParentXPath = function (ObjectName, Name) { var EvenTag = "[tbl-parent-" + ObjectName.toLowerCase() + "='" + Name + "'],[data-tbl-parent-" + ObjectName.toLowerCase() + "='" + Name + "']"; return EvenTag; }; //取得物件 DOM 的 Html 套用至矩資料物件陣中 TableListGetDomHtml = function (Name, ObjectName, EvenTag) { var EvenArray = $(EvenTag); if (EvenArray.length > 0) { //添加父容器標籤 $(EvenTag).parent().attr('tbl-parent-' + ObjectName, Name); //宣告容器 TableListTempData[Name].DomHtml[ObjectName] = []; //擷取 Html for (var i = 0; i < EvenArray.length; i++) { TableListTempData[Name].DomHtml[ObjectName].push(EvenArray[i].outerHTML); } //移除物件 EvenArray.remove(); } else { //返回空值 TableListTempData[Name].DomHtml[ObjectName] = null; } }; //Recover儲存功能 TableListRecoverSave = function (Name) { var StorageSave = TableListTempData[Name].Option; sessionStorage.setItem('TableListRecoverSave' + Name, JSON.stringify(StorageSave)); }; //Recover讀取功能 TableListRecoverLoad = function (Name) { var StorageLoad = jQuery.parseJSON(sessionStorage.getItem('TableListRecoverSave' + Name)); return StorageLoad; }; //取得指定位置資料 TableListGetItem = function (Name, Index) { return TableListTempData[Name].DataArray[Index]; }; //勾選元件 CheckAll 全選監視 TableListCheckAll = function (Name) { //取得全選元件的勾選狀態 var EvenTag = TableListGetXPath('keep', Name, 'CheckAll'); var tempAllCheck = $(EvenTag).prop('checked'); //將當前所有 CheckBox 元件與自身同步 EvenTag = TableListGetXPath('keep', Name, 'CheckBox'); $(EvenTag).each(function (index, element) { element.checked = tempAllCheck; }); }; //取得所有有勾選的 CheckBox 資料 TableListGetCheck = function (Name) { var tempArray = []; var EvenTag = TableListGetXPath('keep', Name, 'CheckBox'); $(EvenTag).each(function (index, element) { if (element.checked) { tempArray.push(TableListTempData[Name].DataArray[index]); } }); return tempArray; }; //全域功能 判斷顯示 ( 目前只支援 tbl-show ) TableListApply = function () { //取得畫面上所有 tbl-show 物件 var EvenTag = "[tbl-show],[data-tbl-show]"; $(EvenTag).each(function (index, element) { var check = ''; if ($(element).attr('tbl-show')) { check = $(element).attr('tbl-show'); } else if ($(element).attr('data-tbl-show')) { check = $(element).attr('data-tbl-show'); } if (eval(check)) { $(element).show(); } else { $(element).hide(); } }); };