亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

jQuery實現凍結表格行和列

2024-05-06 16:19:00
字體:
來源:轉載
供稿:網友
本文給大家分享的是前些日子做的項目中的一個客戶的特殊要求,很少遇到,查詢了好久的度娘,才算找到解決方案,這里分享給大家,有需要的小伙伴可以參考下。
 

客戶要求實現對表格數據的頭幾行或者頭幾列進行凍結,即滾動時保持這幾行/列不動,通過網上查找代碼,參考已有的代碼的思路,實現了可以任意對行、列進行凍結。

實現原理:

創建多個div,div之間通過css實現層疊,每個div放置當前表格的克隆。例如:需要行凍結時,創建存放凍結行表格的div,通過設置z-index屬性和position屬性,讓凍結行表格在數據表格的上層。同理,需要列凍結時,創建存放凍結列表格的div,并放置在數據表格的上層。如果需要行列都凍結時,則除了創建凍結行、凍結列表格的div,還需要創建左上角的固定行列表格的div,并放置在所有div的最上層。 
處理表格的滾動事件,在表格橫向或者縱向滾動時,同時讓相應的凍結行和凍結列也同步滾動。 
處理html的resize事件,同步修改表格的滾動區域寬度和高度

代碼如下:
 

  1. /* 
  2.  * 鎖定表頭和列 
  3.  *  
  4.  * 參數定義 
  5.  *   table - 要鎖定的表格元素或者表格ID 
  6.  *   freezeRowNum - 要鎖定的前幾行行數,如果行不鎖定,則設置為0 
  7.  *   freezeColumnNum - 要鎖定的前幾列列數,如果列不鎖定,則設置為0 
  8.  *   width - 表格的滾動區域寬度 
  9.  *   height - 表格的滾動區域高度 
  10.  */ 
  11. function freezeTable(table, freezeRowNum, freezeColumnNum, width, height) { 
  12.   if (typeof(freezeRowNum) == 'string'
  13.     freezeRowNum = parseInt(freezeRowNum) 
  14.      
  15.   if (typeof(freezeColumnNum) == 'string'
  16.     freezeColumnNum = parseInt(freezeColumnNum) 
  17.  
  18.   var tableId; 
  19.   if (typeof(table) == 'string') { 
  20.     tableId = table; 
  21.     table = $('#' + tableId); 
  22.   } else 
  23.     tableId = table.attr('id'); 
  24.      
  25.   var divTableLayout = $("#" + tableId + "_tableLayout"); 
  26.    
  27.   if (divTableLayout.length != 0) { 
  28.     divTableLayout.before(table); 
  29.     divTableLayout.empty(); 
  30.   } else { 
  31.     table.after("<div id='" + tableId + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + width + "px;'></div>"); 
  32.      
  33.     divTableLayout = $("#" + tableId + "_tableLayout"); 
  34.   } 
  35.    
  36.   var html = ''
  37.   if (freezeRowNum > 0 && freezeColumnNum > 0) 
  38.     html += '<div id="' + tableId + '_tableFix" style="padding: 0px;"></div>'
  39.      
  40.   if (freezeRowNum > 0) 
  41.     html += '<div id="' + tableId + '_tableHead" style="padding: 0px;"></div>'
  42.      
  43.   if (freezeColumnNum > 0) 
  44.     html += '<div id="' + tableId + '_tableColumn" style="padding: 0px;"></div>'
  45.      
  46.   html += '<div id="' + tableId + '_tableData" style="padding: 0px;"></div>'
  47.    
  48.    
  49.   $(html).appendTo("#" + tableId + "_tableLayout"); 
  50.    
  51.   var divTableFix = freezeRowNum > 0 && freezeColumnNum > 0 ? $("#" + tableId + "_tableFix") : null
  52.   var divTableHead = freezeRowNum > 0 ? $("#" + tableId + "_tableHead") : null
  53.   var divTableColumn = freezeColumnNum > 0 ? $("#" + tableId + "_tableColumn") : null
  54.   var divTableData = $("#" + tableId + "_tableData"); 
  55.    
  56.   divTableData.append(table); 
  57.    
  58.   if (divTableFix != null) { 
  59.     var tableFixClone = table.clone(true); 
  60.     tableFixClone.attr("id", tableId + "_tableFixClone"); 
  61.     divTableFix.append(tableFixClone); 
  62.   } 
  63.    
  64.   if (divTableHead != null) { 
  65.     var tableHeadClone = table.clone(true); 
  66.     tableHeadClone.attr("id", tableId + "_tableHeadClone"); 
  67.     divTableHead.append(tableHeadClone); 
  68.   } 
  69.    
  70.   if (divTableColumn != null) { 
  71.     var tableColumnClone = table.clone(true); 
  72.     tableColumnClone.attr("id", tableId + "_tableColumnClone"); 
  73.     divTableColumn.append(tableColumnClone); 
  74.   } 
  75.    
  76.   $("#" + tableId + "_tableLayout table").css("margin""0"); 
  77.    
  78.   if (freezeRowNum > 0) { 
  79.     var HeadHeight = 0; 
  80.     var ignoreRowNum = 0; 
  81.     $("#" + tableId + "_tableHead tr:lt(" + freezeRowNum + ")").each(function () { 
  82.       if (ignoreRowNum > 0) 
  83.         ignoreRowNum--; 
  84.       else { 
  85.         var td = $(this).find('td:first, th:first'); 
  86.         HeadHeight += td.outerHeight(true); 
  87.          
  88.         ignoreRowNum = td.attr('rowSpan'); 
  89.         if (typeof(ignoreRowNum) == 'undefined'
  90.           ignoreRowNum = 0; 
  91.         else 
  92.           ignoreRowNum = parseInt(ignoreRowNum) - 1; 
  93.       } 
  94.     }); 
  95.     HeadHeight += 2; 
  96.      
  97.     divTableHead.css("height", HeadHeight); 
  98.     divTableFix != null && divTableFix.css("height", HeadHeight); 
  99.   } 
  100.    
  101.   if (freezeColumnNum > 0) { 
  102.     var ColumnsWidth = 0; 
  103.     var ColumnsNumber = 0; 
  104.     $("#" + tableId + "_tableColumn tr:eq(" + freezeRowNum + ")").find("td:lt(" + freezeColumnNum + "), th:lt(" + freezeColumnNum + ")").each(function () { 
  105.       if (ColumnsNumber >= freezeColumnNum) 
  106.         return
  107.          
  108.       ColumnsWidth += $(this).outerWidth(true); 
  109.        
  110.       ColumnsNumber += $(this).attr('colSpan') ? parseInt($(this).attr('colSpan')) : 1; 
  111.     }); 
  112.     ColumnsWidth += 2; 
  113.  
  114.     divTableColumn.css("width", ColumnsWidth); 
  115.     divTableFix != null && divTableFix.css("width", ColumnsWidth); 
  116.   } 
  117.    
  118.   divTableData.scroll(function () { 
  119.     divTableHead != null && divTableHead.scrollLeft(divTableData.scrollLeft()); 
  120.      
  121.     divTableColumn != null && divTableColumn.scrollTop(divTableData.scrollTop()); 
  122.   }); 
  123.    
  124.   divTableFix != null && divTableFix.css({ "overflow""hidden""position""absolute""z-index""50" }); 
  125.   divTableHead != null && divTableHead.css({ "overflow""hidden""width": width - 17, "position""absolute""z-index""45" }); 
  126.   divTableColumn != null && divTableColumn.css({ "overflow""hidden""height": height - 17, "position""absolute""z-index""40" }); 
  127.   divTableData.css({ "overflow""scroll""width": width, "height": height, "position""absolute" }); 
  128.    
  129.   divTableFix != null && divTableFix.offset(divTableLayout.offset()); 
  130.   divTableHead != null && divTableHead.offset(divTableLayout.offset()); 
  131.   divTableColumn != null && divTableColumn.offset(divTableLayout.offset()); 
  132.   divTableData.offset(divTableLayout.offset()); 
  133.  
  134. /* 
  135.  * 調整鎖定表的寬度和高度,這個函數在resize事件中調用 
  136.  *  
  137.  * 參數定義 
  138.  *   table - 要鎖定的表格元素或者表格ID 
  139.  *   width - 表格的滾動區域寬度 
  140.  *   height - 表格的滾動區域高度 
  141.  */ 
  142. function adjustTableSize(table, width, height) { 
  143.   var tableId; 
  144.   if (typeof(table) == 'string'
  145.     tableId = table; 
  146.   else 
  147.     tableId = table.attr('id'); 
  148.    
  149.   $("#" + tableId + "_tableLayout").width(width).height(height); 
  150.   $("#" + tableId + "_tableHead").width(width - 17); 
  151.   $("#" + tableId + "_tableColumn").height(height - 17); 
  152.   $("#" + tableId + "_tableData").width(width).height(height); 
  153.  
  154. function pageHeight() { 
  155.   if ($.browser.msie) { 
  156.     return document.compatMode == "CSS1Compat" ? document.documentElement.clientHeight : document.body.clientHeight; 
  157.   } else { 
  158.     return self.innerHeight; 
  159.   } 
  160. }; 
  161.  
  162. //返回當前頁面寬度 
  163. function pageWidth() { 
  164.   if ($.browser.msie) { 
  165.     return document.compatMode == "CSS1Compat" ? document.documentElement.clientWidth : document.body.clientWidth; 
  166.   } else { 
  167.     return self.innerWidth; 
  168.   } 
  169. }; 
  170.  
  171. $(document).ready(function() { 
  172.   var table = $("table"); 
  173.   var tableId = table.attr('id'); 
  174.   var freezeRowNum = table.attr('freezeRowNum'); 
  175.   var freezeColumnNum = table.attr('freezeColumnNum'); 
  176.    
  177.   if (typeof(freezeRowNum) != 'undefined' || typeof(freezeColumnNum) != 'undefined') { 
  178.     freezeTable(table, freezeRowNum || 0, freezeColumnNum || 0, pageWidth(), pageHeight()); 
  179.      
  180.     var flag = false
  181.     $(window).resize(function() { 
  182.       if (flag)  
  183.         return ; 
  184.        
  185.       setTimeout(function() {  
  186.         adjustTableSize(tableId, pageWidth(), pageHeight());  
  187.         flag = false;  
  188.       }, 100); 
  189.        
  190.       flag = true
  191.     }); 
  192.   } 
  193. }); 
?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产一区二区三区| 欧美激情性做爰免费视频| 国产精品劲爆视频| 成人福利免费观看| 亚洲精品电影在线观看| 91在线观看免费高清完整版在线观看| 国产在线a不卡| 欧美久久精品午夜青青大伊人| 国产精品久久久久久婷婷天堂| 91精品免费看| 精品国产一区久久久| 亚洲国产精品成人va在线观看| 一本大道久久加勒比香蕉| 亚洲tv在线观看| 日本不卡高字幕在线2019| 欧美日韩国产va另类| 在线看欧美日韩| 国产成人激情小视频| 国产精品伦子伦免费视频| 欧美成人免费全部| 日韩美女免费视频| 精品少妇一区二区30p| 欧美老少做受xxxx高潮| 久久九九精品99国产精品| 欧美亚洲第一页| 日韩网站免费观看| 性欧美亚洲xxxx乳在线观看| 欧美成人午夜激情视频| 美日韩精品免费视频| 搡老女人一区二区三区视频tv| 欧美美女操人视频| 国产精品免费看久久久香蕉| 亚洲精品福利在线观看| 黄色一区二区在线| 国产成人精品视频在线观看| 日本精品免费观看| 国产午夜精品一区理论片飘花| 色综合五月天导航| 国产精品偷伦一区二区| 亚洲午夜未满十八勿入免费观看全集| 精品亚洲精品福利线在观看| 亚洲国产成人爱av在线播放| 久久久久国产精品一区| 欧美性视频网站| 国产美女91呻吟求| 精品久久久国产| 欧美国产日韩一区二区在线观看| 欧美在线亚洲在线| 色婷婷av一区二区三区在线观看| 国产精品91免费在线| 国产精品视频一区二区三区四| 九九热99久久久国产盗摄| 日韩欧美亚洲范冰冰与中字| 欧美精品aaa| 日韩av最新在线| 国产精品旅馆在线| 91美女片黄在线观| 欧美一区三区三区高中清蜜桃| 亚洲一区亚洲二区亚洲三区| 久久久精品视频在线观看| 亚洲精品ady| 97视频免费在线观看| 操日韩av在线电影| 国产免费一区二区三区香蕉精| 亚洲91av视频| 久久精品夜夜夜夜夜久久| 国产有码在线一区二区视频| 国产精品久久久久久久久免费看| 亚洲欧美成人网| 97视频在线观看网址| 日本a级片电影一区二区| 美女国内精品自产拍在线播放| 国产午夜精品全部视频在线播放| 97免费视频在线| 高清欧美性猛交xxxx| 亚洲色无码播放| 日韩av大片免费看| 成人国产精品日本在线| 国产香蕉97碰碰久久人人| 国产日韩欧美中文在线播放| 久久婷婷国产麻豆91天堂| 一本大道香蕉久在线播放29| 国产成人一区二区三区电影| 欧美在线www| 国产一区二区三区在线视频| 亚洲欧美日韩一区二区三区在线| 亚洲国产精品久久久久秋霞蜜臀| 91久久夜色精品国产网站| 国产视频一区在线| 日韩av免费在线观看| 国产精品国产福利国产秒拍| 欧美午夜精品久久久久久人妖| 国产成人激情小视频| 国产精品视频男人的天堂| 亚洲综合在线中文字幕| 国产精品视频公开费视频| 欧美成人一区在线| 亚洲开心激情网| 日韩亚洲一区二区| 亚州成人av在线| 欧美国产中文字幕| 欧美国产中文字幕| 欧美亚洲激情在线| 亚洲激情 国产| 欧美老女人性视频| 欧美综合在线观看| 91福利视频在线观看| 亚洲第一精品福利| 国产精品毛片a∨一区二区三区|国| 日本不卡视频在线播放| 欧美亚洲另类在线| 精品国产31久久久久久| 日韩欧美福利视频| 亚洲91精品在线观看| 欧美精品videos性欧美| 日韩在线观看视频免费| 日韩电影免费在线观看中文字幕| 国产剧情久久久久久| 日韩高清电影免费观看完整| 精品国产乱码久久久久久婷婷| 欧美成人免费播放| 亚洲欧美日韩区| 精品日韩视频在线观看| 国产精品99一区| 欧洲日韩成人av| 国产日韩欧美影视| 中文字幕亚洲无线码a| 亚洲国产欧美精品| 欧美日韩裸体免费视频| 久久久午夜视频| 亚洲精品美女免费| 亚洲综合色激情五月| 97视频免费在线观看| 欧美日在线观看| 91网在线免费观看| 色综合久久88| 亚洲视频在线看| 久久精品国产成人精品| 国产福利精品视频| 日韩一区在线视频| 性亚洲最疯狂xxxx高清| 久久久久久久久久久久av| 国产精品久久久久久久久久久久| 欧美亚洲视频一区二区| 欧美精品久久久久久久免费观看| 亚洲人线精品午夜| 蜜臀久久99精品久久久久久宅男| 欧洲美女7788成人免费视频| 欧美大片免费看| 最近2019中文字幕一页二页| 日本久久久久久| 成人久久久久爱| 国产欧美日韩免费| 日韩在线激情视频| 日韩精品电影网| 亚洲аv电影天堂网| 97国产suv精品一区二区62| 亚洲已满18点击进入在线看片| 伊人久久久久久久久久久久久| 91精品视频免费| 久久久久久噜噜噜久久久精品| 国产做受高潮69| 97久久伊人激情网| 欧美日韩高清在线观看|