anavdesign
6/25/2016 - 1:27 PM

JS: Split Table

JS: Split Table

/*
 =====================================================================
  $ SPLIT TABLE
 =====================================================================
 */

/***********************************************************
 ***********************************************************
 
  Usage:
$('.split-table table').splitTable({
	tableSplit: 2
});

 ***********************************************************
 ***********************************************************/

(function ($) {
	$.fn.splitTable = function(options) {

        // Options
        var settings = $.extend({
            tableSplit: 2,
        }, options );

		var tbl = this,
			tblHead = tbl.children('thead'),
			tblBody = tbl.children('tbody');

		if(tbl.is('table')) {
			tbl.html('<div class="js-split-table-container js-split-table-container-' +
				settings.tableSplit + '" />')
				.children().unwrap()
				.each(function() {

		            var rowsPerTable = [],
		            rows = tblBody.children('tr'),
		            minRowsPerTable = Math.floor(rows.length / settings.tableSplit),
		            difference = rows.length - (minRowsPerTable * settings.tableSplit);

		            for (var i = 0; i < settings.tableSplit; i++) {
		                if (i < difference) {
		                    rowsPerTable[i] = minRowsPerTable + 1;
		                } else {
		                    rowsPerTable[i] = minRowsPerTable;
		                }
		            }

		            for (i = 0; i < settings.tableSplit; i++) {
		            	$('<table class="js-split-table js-split-table-' + (i + 1) + '"><tbody /></table>')
		            		.prepend(tblHead.clone())
		            		.appendTo($(this))
		            		.wrap('<div class="js-split-table-item js-split-table-item-' + (i + 1) + '" />');
		                for (var j = 0; j < rowsPerTable[i]; j++) {
		                    var pointer = 0;
		                    for (var k = 0; k < i; k++) {
		                        pointer += rowsPerTable[k];
		                    }
		                    $(this).find('.js-split-table-' + (i + 1) + ' tbody')
		                    	.append(rows[j + pointer]);
		                }
		            }
				});
		}
	};
}(jQuery));