zoukankan      html  css  js  c++  java
  • jQuery 关于ScrollableGridPlugin.js(固定表头)插件的逐步解析

     1 /*!
     2 * This plug-in is developed for ASP.Net GridView control to make the GridView scrollable with Fixed headers.
     3 */
     4 (function ($) {
     5     //1、定义一个jQuery实例方法,也是我们调用这个插件的入口
     6     $.fn.Scrollable = function (options) {
     7         var defaults = {
     8             ScrollHeight: 300,
     9             Width: 0
    10         };
    11         //2、扩展集合,如果外部没有传入ScrollHeight的值,就默认使用300这个值,如果传入,就用传入的ScrollHeight值
    12         var options = $.extend(defaults, options);
    13         return this.each(function () {
    14             //3、获取当前gridview控件的对象
    15             var grid = $(this).get(0);
    16             //4、获取gridview的宽度
    17             var gridWidth = grid.offsetWidth;
    18             var headerCellWidths = new Array();
    19             //5、创建了一个存储表头各个标题列的宽度的数组
    20             for (var i = 0; i < grid.getElementsByTagName("TH").length; i++) {
    21                 headerCellWidths[i] = grid.getElementsByTagName("TH")[i].offsetWidth;
    22             }
    23             //6、在文档中gridview的同级位置最后加一个div元素
    24             grid.parentNode.appendChild(document.createElement("div"));
    25             //7、gridview的父节点,是个div
    26             var parentDiv = grid.parentNode;
    27 
    28             //8、在dom中创建一个table元素
    29             var table = document.createElement("table");
    30             //9、把gridview的所有属性加到新创建的table元素上
    31             for (i = 0; i < grid.attributes.length; i++) {
    32                 if (grid.attributes[i].specified && grid.attributes[i].name != "id") {
    33                     table.setAttribute(grid.attributes[i].name, grid.attributes[i].value);
    34                 }
    35             }
    36             //10、将样式也加到table元素上
    37             table.style.cssText = grid.style.cssText;
    38             //11、为table元素设置与gridview同样的宽
    39             table.style.width = gridWidth + "px";
    40             //12、为table元素加一个tbody元素
    41             table.appendChild(document.createElement("tbody"));
    42             //13、把gridview中的第一行数据加到tbody元素中,即table里现在存着一行gridview的标题元素,
    43             //同时在gridview里删除了标题这一行的元素
    44             table.getElementsByTagName("tbody")[0].appendChild(grid.getElementsByTagName("TR")[0]);
    45             //14、取得表格标题列的集合
    46             var cells = table.getElementsByTagName("TH");
    47 
    48             //15、gridview中第一行数据列的集合
    49             var gridRow = grid.getElementsByTagName("TR")[0]; 
    50             for (var i = 0; i < cells.length; i++) {
    51                 var width;
    52                 //16、如果标题格的宽度大于数据列的宽度
    53                 if (headerCellWidths[i] > gridRow.getElementsByTagName("TD")[i].offsetWidth) {
    54                     width = headerCellWidths[i];
    55                 }
    56                 //17、如果标题格的宽度小于数据列的宽度
    57                 else {
    58                     width = gridRow.getElementsByTagName("TD")[i].offsetWidth;
    59                 }
    60                 cells[i].style.width = parseInt(width - 3) + "px";
    61                 //18、将每个标题列和数据列的宽度均调整为取其中更宽的一个,-3是出于对表格的样式进行微调考虑,不是必须
    62                 gridRow.getElementsByTagName("TD")[i].style.width = parseInt(width - 3) + "px"; 
    63             }
    64             //19、删除gridview控件(注意只是从文档流中删除,实际还在内存当中,注意27条,现在的情况是table里只有一个表头
    65             parentDiv.removeChild(grid);
    66             //20、在文档中再创建一个div元素
    67             var dummyHeader = document.createElement("div");
    68             //21、把表头table加入其中
    69             dummyHeader.appendChild(table);
    70             //22、把这个div插入到原来gridview的位置里 
    71             parentDiv.appendChild(dummyHeader);
    72             //23、如果我们最初传入了一个想要的表格宽度值,就将gridWidth赋上这个值
    73             if (options.Width > 0) {
    74                 gridWidth = options.Width;
    75             }
    76             //24、再创建一个div
    77             var scrollableDiv = document.createElement("div");
    78             //25、在原基础上+17是因为这是一个具有滑动条的table,当出现滑动条的时候,
    79             //会在宽度上多出一个条的宽度,为了使数据列与标题列保持一致,要把这个宽度算进行,
    80             //17这个值也不是必须,这个可以试验着来。
    81             gridWidth = parseInt(gridWidth) + 17;
    82             //26、给具有滚动条的div加上样式,height就是我们想让它在多大的长度时出现滚动条
    83             scrollableDiv.style.cssText = "overflow:auto;height:" + options.ScrollHeight + "px;" + gridWidth + "px";
    84             //27、将gridview(目前只存在数据存在数据列)加到这个带有滚动条的div中,这里是从内存中将grid取出
    85             scrollableDiv.appendChild(grid);
    86             //28、将带有滚动条的div加到table的下面
    87             parentDiv.appendChild(scrollableDiv);
    88         });
    89     };
    90 })(jQuery);
    1 <script type="text/javascript" src="../Scripts/PlugIn/ScrollableGridPlugin.js"></script>
    2 <script type="text/javascript">
    3   jQuery(document).ready(function () {
    4   jQuery("#<%=gv_bugList.ClientID %>").Scrollable({
    5      ScrollHeight: 400,
    6       500
    7        });
    8   })
    9 </script>
  • 相关阅读:
    Mono 开发者会议
    PHP正在死亡?
    区域设置 ID (LCID) 表
    OpenSource 的 Free是自由 非免费
    搭建.net framwork 3.0开发环境的一篇文章
    Rainbow的相关资料
    利用VS2005中的Code Snippets提高开发效率
    判定是否为IPv4
    我的MVVM框架 v3教程——流程相关
    查询json数据结构的8种方式
  • 原文地址:https://www.cnblogs.com/lgx5/p/10057706.html
Copyright © 2011-2022 走看看