parent
8d5455cc18
commit
81de71d464
@ -0,0 +1,102 @@
|
||||
/**
|
||||
* @summary ColumnSearch
|
||||
* @description Feature to provide column searching by text input or select
|
||||
* @version 1.0.0
|
||||
* @file columnsearch.js
|
||||
* @author datahandler (www.datahandler.uk)
|
||||
* @copyright Copyright datahandler (www.datahandler.uk)
|
||||
*
|
||||
* License MIT - http://datatables.net/license/mit
|
||||
*/
|
||||
|
||||
/**
|
||||
* Example usage
|
||||
* @example
|
||||
* var table = $('#table_id').DataTable();
|
||||
* columnSearch =
|
||||
* new $.fn.dataTable.ColumnSearch(table, {
|
||||
* searchElementType: 'select',
|
||||
* rowId: 'rowSearch'
|
||||
* });
|
||||
*/
|
||||
(function ($) {
|
||||
var ColumnSearch = function (dt, options) {
|
||||
var opts = $.extend({}, ColumnSearch.defaults, options);
|
||||
|
||||
if (opts.searchElementType === 'select') initSelectSearch();
|
||||
else initTextSearch();
|
||||
|
||||
function initSelectSearch() {
|
||||
if (opts.rowId != null) {
|
||||
$('tr#' + opts.rowId + ' th', dt.table().node()).each(function(i) {
|
||||
var column = dt.column(i);
|
||||
appendSelectTo($(this), column);
|
||||
});
|
||||
}
|
||||
else {
|
||||
dt.columns().every( function () {
|
||||
var column = this;
|
||||
appendSelectTo($(column.footer()).empty(), column);
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
function appendSelectTo($elem, col) {
|
||||
var select = $('<select class="col-filter"><option value="">' + opts.selectAllText + '</option></select>')
|
||||
.appendTo( $elem )
|
||||
.on( 'change', function () {
|
||||
var val = $.fn.dataTable.util.escapeRegex(
|
||||
$(this).val()
|
||||
);
|
||||
|
||||
col
|
||||
.search( val ? '^'+val+'$' : '', true, false )
|
||||
.draw();
|
||||
} );
|
||||
|
||||
col.data().unique().sort().each( function ( d, j ) {
|
||||
select.append( '<option value="'+d+'">'+d+'</option>' )
|
||||
} );
|
||||
}
|
||||
|
||||
function initTextSearch() {
|
||||
if (opts.rowId != null) {
|
||||
$('tr#' + opts.rowId + ' th', dt.table().node()).each(function(i) {
|
||||
var column = dt.column(i);
|
||||
var header = $(column.header());
|
||||
var headerText = header.text();
|
||||
appendTextInputTo($(this), column, opts.displayHeadingAsPlaceholder ? headerText : '');
|
||||
});
|
||||
}
|
||||
else {
|
||||
dt.columns().every( function () {
|
||||
var column = this;
|
||||
var footer = $(column.footer());
|
||||
var footerText = footer.text();
|
||||
appendTextInputTo(footer.empty(), column, opts.displayHeadingAsPlaceholder ? footerText : '');
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
function appendTextInputTo($elem, col, placeholder) {
|
||||
var textInput = $('<input type="text" placeholder="Search '+placeholder+'" />')
|
||||
.appendTo( $elem )
|
||||
.on( 'keyup change', function () {
|
||||
if ( col.search() !== this.value ) {
|
||||
col
|
||||
.search( this.value )
|
||||
.draw();
|
||||
}
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
||||
ColumnSearch.defaults = {
|
||||
searchElementType: 'select',
|
||||
selectAllText: 'All',
|
||||
displayHeadingAsPlaceholder: false
|
||||
};
|
||||
|
||||
$.fn.dataTable.ColumnSearch = ColumnSearch;
|
||||
$.fn.DataTable.ColumnSearch = ColumnSearch;
|
||||
}(jQuery));
|
Loading…
Reference in new issue