Last active
December 14, 2015 11:49
-
-
Save 100lp/5081898 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script type="text/javascript"> | |
(function($) { | |
/* | |
* Function: fnGetColumnData | |
* Purpose: Return an array of table values from a particular column. | |
* Returns: array string: 1d data array | |
* Inputs: object:oSettings - dataTable settings object. This is always the last argument past to the function | |
* int:iColumn - the id of the column to extract the data from | |
* bool:bUnique - optional - if set to false duplicated values are not filtered out | |
* bool:bFiltered - optional - if set to false all the table data is used (not only the filtered) | |
* bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array | |
* Author: Benedikt Forchhammer <b.forchhammer /AT\ mind2.de> | |
*/ | |
$.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) { | |
// check that we have a column id | |
if ( typeof iColumn == "undefined" ) return new Array(); | |
// by default we only want unique data | |
if ( typeof bUnique == "undefined" ) bUnique = true; | |
// by default we do want to only look at filtered data | |
if ( typeof bFiltered == "undefined" ) bFiltered = true; | |
// by default we do not want to include empty values | |
if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true; | |
// list of rows which we're going to loop through | |
var aiRows; | |
// use only filtered rows | |
if (bFiltered == true) aiRows = oSettings.aiDisplay; | |
// use all rows | |
else aiRows = oSettings.aiDisplayMaster; // all row numbers | |
// set up data array | |
var asResultData = new Array(); | |
for (var i=0,c=aiRows.length; i<c; i++) { | |
iRow = aiRows[i]; | |
var aData = this.fnGetData(iRow); | |
var sValue = aData[iColumn]; | |
// ignore empty values? | |
if (bIgnoreEmpty == true && sValue.length == 0) continue; | |
// ignore unique values? | |
else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue; | |
// else push the value onto the result data array | |
else asResultData.push(sValue); | |
} | |
return asResultData; | |
}}(jQuery)); | |
function fnCreateSelect( aData ) | |
{ | |
var r='<select><option value=""></option>', i, iLen=aData.length; | |
for ( i=0 ; i<iLen ; i++ ) | |
{ | |
text = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/.test(aData[i]) ? $(aData[i]).text() : aData[i]; | |
r += '<option value="'+text+'">'+text+'</option>'; | |
} | |
return r+'</select>'; | |
} | |
$(document).ready(function() { | |
/* Initialise the DataTable */ | |
var oTable = $('#table_id').dataTable( { | |
"oLanguage": { | |
"sSearch": "Search all columns:", | |
"sUrl": "/templates/1/ru_RU.txt", | |
"oPaginate": { | |
"sFirst": "Первая", | |
"sLast": "Последняя", | |
"sNext": "Следующая", | |
"sPrevious": "Предыдущая", | |
} | |
}, | |
"sPaginationType": "full_numbers" | |
} ); | |
/* Add a select menu for each TH element in the table footer */ | |
$("tfoot th").each( function ( i ) { | |
this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) ); | |
$('select', this).change( function () { | |
oTable.fnFilter( $(this).val(), i ); | |
} ); | |
} ); | |
} ); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment