js 固定表头
来源:互联网 发布:ghost软件的使用方法 编辑:程序博客网 时间:2024/05/16 15:14
/*********************************** 名称:JQeury实现表格行列冻结**** 作者:杨积江**** 时间:2114年4月16日**** 联系:yangjijiang@sina.cn**** 描述:类似Excel中的冻结窗格功能.建议给出表头固定宽度,所有单元格的高度,指定表格宽度;**********************************/$.fn.mergeAttributes = function(src){if($.browser.msie) {$(this).get(0).mergeAttributes(src.get(0));}else{attrs = src.get(0).attributes;//保存所有属性i = attrs.length - 1;for(;i>=0;i--){var name = attrs[i].name;//取出属性名if(name.toLowerCase() === 'id' || attrs[i].value=="" || attrs[i].value==null ||attrs[i].value=="null"){continue;}//忽略id属性 和 值为空的属性的标签元素的合并try{$(this).attr(name,attrs[i].value);}catch(e){}}}}$.fn.FrozenTable = function(iRowHead,iRowFoot,iColLeft){var oTable = $(this);var oTableId = oTable.attr("id");var oDiv = $(this).parent();if(oDiv.get(0).tagName != "DIV") return;oTable.find("td").attr("noWrap","nowrap");//oTable.css("table-layout","fixed"); //表格宽高大于div宽高if(oTable.width()>oDiv.width() && oTable.height()>oDiv.height()){if(iRowHead>0 && iColLeft>0){var oCloneTable = $("<table id='oTableLH_"+oTableId+"'></table>");oDiv.parent().append(oCloneTable);oCloneTable.CloneTable(oTable,0,iRowHead,iColLeft);oCloneTable.css("position","absolute");oCloneTable.css("z-index","1004");oCloneTable.css("left",oDiv.offset().left);oCloneTable.css("top",oDiv.offset().top);}if(iRowFoot>0 && iColLeft>0){var oCloneTable = $("<table id='oTableLF_"+oTableId+"'></table>");oDiv.parent().append(oCloneTable);oCloneTable.CloneTable(oTable,oTable.find("tr").length-iRowFoot,oTable.find("tr").length,iColLeft);oCloneTable.css("position","absolute");oCloneTable.css("z-index","1003");oCloneTable.css("left",oDiv.offset().left);oCloneTable.css("top",(oDiv.offset().top+oDiv.outerHeight(true)-oCloneTable.outerHeight(true)-17));}} //固定了表头 表格高度大于div容器高度if(iRowHead>0 && oTable.height()>oDiv.height()){var oCloneDiv = $("<div id='oDivH_"+oTableId+"'><table></table></div>");oDiv.parent().append(oCloneDiv);oCloneDiv.find("table").CloneTable(oTable,0,iRowHead,-1);oCloneDiv.css("overflow","hidden");oCloneDiv.css("width",oDiv.outerWidth(true)-21);oCloneDiv.css("position","absolute");oCloneDiv.css("z-index","1002");oCloneDiv.css("left",oDiv.offset().left);oCloneDiv.css("top",oDiv.offset().top);} //固定了表底部 表格高度大于div容器高度if(iRowFoot>0 && oTable.height()>oDiv.height()){var oCloneDiv = $("<div id='oDivF_"+oTableId+"'><table></table></div>");oDiv.parent().append(oCloneDiv);oCloneDiv.find("table").CloneTable(oTable,oTable.find("tr").length-iRowFoot,oTable.find("tr").length,-1);oCloneDiv.css("overflow","hidden");oCloneDiv.css("width",oDiv.outerWidth(true)-21);oCloneDiv.css("position","absolute");oCloneDiv.css("z-index","1001");oCloneDiv.css("left",oDiv.offset().left);oCloneDiv.css("top",oDiv.offset().top+oDiv.outerHeight(true)-oCloneTable.outerHeight(true)-17);} //固定了表左侧 表格宽度大于div容器宽度if(iColLeft>0 && oTable.width()>oDiv.width()){var oCloneDiv = $("<div id='oDivL_"+oTableId+"'><table></table></div>");oDiv.parent().append(oCloneDiv);oCloneDiv.find("table").CloneTable(oTable,0,oTable.find("tr").length,iColLeft);oCloneDiv.css("overflow","hidden");oCloneDiv.css("height",oDiv.outerHeight(false)-17);//TODOoCloneDiv.css("position","absolute");oCloneDiv.css("z-index","1000");oCloneDiv.css("left",oDiv.offset().left);oCloneDiv.css("top",oDiv.offset().top);}oDiv.scroll(function(){if(typeof($("#oDivH_"+oTableId).get(0))!='undefined'){$("#oDivH_"+oTableId).scrollLeft($(this).scrollLeft());}if(typeof($("#oDivF_"+oTableId).get(0))!='undefined'){ //TODO$("#oDivF_"+oTableId).scrollLeft($(this).scrollLeft());}if(typeof($("#oDivL_"+oTableId).get(0))!='undefined'){$("#oDivL_"+oTableId).scrollTop($(this).scrollTop());}});};/** * * @param oSrcTable 原始表格(需要克隆的表格) * @param iRowStart 行号开始处 * @param iRowEnd 行号完结处 * @param iColumnEnd 列完结处 * @constructor */$.fn.CloneTable = function(oSrcTable,iRowStart,iRowEnd,iColumnEnd){var iWidth = 0,iHeight = 0;$(this).mergeAttributes(oSrcTable);var Log="";var rowspanValue = 0;var rowNumber = 0;var rowIndex;for(var i=iRowStart;i<iRowEnd;i++){//遍历每一行var oldTr = oSrcTable.find("tr").eq(i);//找出第i个tr元素var isSingleRowspan = false;var rowspanCount = 0;var colCount = 0;var colNumber = 0;for(var j=0; j<(iColumnEnd==-1?oldTr.find("td").length:iColumnEnd); j++){var oldTd = oldTr.find("td").eq(j);//遍历td元素colNumber++;var colspan = oldTd.attr("colspan");//得到colspan的数目if (typeof(colspan)=="undefined" || colspan==1) { colCount += 1;}else{ colCount += colspan;//统计列数目} //统计行数目var rowspan = oldTd.attr("rowspan"); //TODOif(typeof(rowspan)!="undefined" && rowspan!=1){rowspanCount++;rowIndex = i;rowspanValue = rowspan;rowNumber = rowspanCount;}if(colCount>=iColumnEnd && iColumnEnd!=-1){break;}}Log +=i+"=="+rowIndex+"="+rowspanCount+"="+rowNumber+"="+rowspanValue+"<br>"; //TODOif(i>rowIndex && i<=(rowIndex+rowspanValue-1) && iColumnEnd!=-1){if(rowNumber!=0 && iColumnEnd==rowNumber){isSingleRowspan = true;}else{colNumber -= 1;if(rowspanCount==0){colNumber -= (rowNumber-1);}}}if(colNumber!=0){var newTr = $("<tr></tr>");newTr.mergeAttributes(oldTr);var jWidth = 0;iHeight += oldTr.outerHeight(false);for(var j=0; j<colNumber;j++){if(isSingleRowspan){continue;}var oldTd = oldTr.find("td").eq(j);var newTd = oldTd.clone(true,true);/*IE 一行多列合并时if(iColumnEnd==-1 && iRowStart!=0 && $.browser.msie){if (typeof(newTd.attr("colspan"))!="undefined" && newTd.attr("colspan")!=1) { alert(newTd.text()+"==2=="+newTd.attr("colspan")+"---"+colCount);} }if(iColumnEnd==-1 && iRowStart!=0 && j==1){ newTd.width(oidTd.outerWidth(true)-1);jWidth += (oidTd.outerWidth(true)-1);}else{newTd.width(oidTd.outerWidth(true));jWidth += oidTd.outerWidth(true);}*/newTd.height(oldTd.height()+1);//TODOnewTd.width(oldTd.outerWidth(true));jWidth += oldTd.outerWidth(true);iWidth = Math.max(iWidth,jWidth);newTr.append(newTd);}$(this).append(newTr);}}$(this).width(iWidth);$(this).height(iHeight);}
0 0
- js方式固定表头
- js固定表头补充
- js固定表头
- js 固定表头
- js 实现 table 固定表头
- jquery.tablefix.js 表头固定
- JS固定表头及固定左边列
- JS实现固定表头,实现内容滚动
- js实现 固定表头,拖动部分内容
- jquery.fixedtableheader.min.js固定表头功能
- js表头固定实现思路汇总
- Angular.js+Bootstrap实现固定表头案例
- js、css实现table表头固定
- JS实现固定表头与固定列名方法
- 表头固定
- 固定表头
- 固定 表头
- 表头固定
- AlarmManager类的应用(实现闹钟功能)
- iOS 四种保存数据的方式!
- cocos2dx 获取系统时间
- 关于子线程死循环为什么不起作用的原因or线程的阻塞能影响进程
- 2014年苹果ios开发者证书申请及xcode5应用上线发布
- js 固定表头
- 向量垂直方向
- Android 动画框架详解
- 第4章 连接管理
- 最全面的Linux信号量学习
- hive udf和udaf
- 如何将.keystore 文件转成.key文件
- 树形DP(Rebuilding Roads poj1947)
- ios webkit低内存警告