// +------------------------------------------------------------------------------------+ // | jQuery plugin scrollTable | // +------------------------------------------------------------------------------------+ // | @author: Juarez Gon?alves Nery Junior - https://juareznjunior.wordpress.com | // | @email: juareznjunior@gmail.com | // | @license: CC Attribution 2.5 Brazil http://creativecommons.org/licenses/by/2.5/br/ | // +------------------------------------------------------------------------------------+ ;(function($){ var create = { elem: false ,appendTo:false ,run: function() { var $elem = create.elem ,$append = create.appendTo ,$tr = $elem.find('tr'); if ($tr.length > 0) { if ('' !== $elem[0].className) { $append.addClass($elem[0].className); } $tr.each(function(){ var selfTR = this ,tr = document.createElement('tr') ,th = document.createElement('th'); $(th).width(12).appendTo(selfTR); $(selfTR).find('th').each(function(){ $(this).css({ width: $(this).width() ,backgroundColor: $(this).css('background-color') }).clone(true).attr({ rowSpan: this.rowSpan, colSpan: this.colSpan }).appendTo(tr); }); $(tr).appendTo($append); }); /* WTF?! Fail! */ /*if ('tfoot' === $elem[0].tagName.toLowerCase()) { $elem.css('visibility',(($.browser.msie) ? 'hidden' : 'collapse')); }*/ /* True! */ if ('tfoot' === $elem[0].tagName.toLowerCase()) { $elem.css('display', 'none'); } } create.elem = false; create.appendTo = false; } }; $.fn.scrollTable = function(options){ var options = $.extend({},$.fn.scrollTable.defaults,options); return this.each(function(){ var $self = $(this) ,selfDOM = this; if (!$self.hasClass('hasGrid')) { $self.addClass('hasGrid').width('100%').css('position', 'relative'); var $TABLE = $self.find('table'); if (0 === $TABLE.length) { return; } $TABLE.width($self.width()); var divHeader = document.createElement('div') ,divFooter = null ,$divHeader = $(divHeader).addClass('divHeader').append('
').insertBefore(selfDOM) ,$TABLE_THEAD = $TABLE.find('thead') ,$TABLE_TFOOT = $TABLE.find('tfoot') ,attrTable = { cellSpacing: $TABLE.get(0).cellSpacing||'', cellPadding: $TABLE.get(0).cellPadding||'' }; if ($TABLE_TFOOT.length) { divFooter = document.createElement('div'); var $divFooter = $(divFooter).addClass('divFooter').append('
').insertAfter(selfDOM), $TABLE_FOOTER_TFOOT = $divFooter.find('table').width($self.width()).attr(attrTable).find('tfoot'); } var cpt = $('caption',$TABLE[0]) ,$TABLE_HEADER_THEAD = $divHeader.find('table').each(function(){ if (cpt.length) { $(this).append(cpt); } }).attr(attrTable).width($self.width()).find('thead'); // Create create.elem = $TABLE_THEAD; create.appendTo = $TABLE_HEADER_THEAD; create.run(); if ($TABLE_TFOOT.length) { create.elem = $TABLE_TFOOT; create.appendTo = $TABLE_FOOTER_TFOOT; create.run(); } $self.css({ height: options.height ,overflowY: 'scroll',overflowX: 'hidden' }); var marginTop = 0; $TABLE_THEAD.each(function(){ marginTop += parseInt($(this).height()) }); $TABLE.css({marginTop: parseInt(marginTop+ 2)*(-1)}); ($.isFunction(options.onComplete) && options.onComplete.call(selfDOM,divHeader,divFooter)); }; }); }; $.fn.scrollTable.defaults = { height:136 ,onComplete:null }; })(jQuery);