<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>easyUI</title>
<link rel="" href="" >
<style type="text/css"> </style> <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css"> <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css"> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="http://www.jeasyui.com/easyui/datagrid-filter.js"></script>
<script type="text/javascript"> var data = [
{"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"},
{"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"},
{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"N","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"},
{"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"N","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"},
{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"N","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"},
{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"},
{"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"N","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}
];
$(function(){
var dg = $('#dg').datagrid(); dg.datagrid('enableFilter', [{
field:'listprice',
type:'numberbox',
options:{precision:1},
op:['equal','notequal','less','greater']
},{
field:'unitcost',
type:'numberbox',
options:{precision:1},
op:['equal','notequal','less','greater']
},{
field:'status',
type:'combobox',
options:{
panelHeight:'auto',
data:[{value:'',text:'All'},{value:'P',text:'P'},{value:'N',text:'N'}],
onChange:function(value){
if (value == ''){
dg.datagrid('removeFilterRule', 'status');
} else {
dg.datagrid('addFilterRule', {
field: 'status',
op: 'equal',
value: value
});
}
dg.datagrid('doFilter');
}
}
}]); });
</script> </head>
<body >
<h2>DataGrid Filter Row</h2> <div class="demo-info" style="margin-bottom:10px">
<div class="demo-tip icon-tip"> </div>
<div>This sample shows how to customize the filter menu of datagrid.</div>
</div>
<table id="dg" title="DataGrid" style="width:700px;height:250px" data-options="
singleSelect:true,
data:data
">
<thead>
<tr>
<th data-options="field:'itemid',width:80">Item ID</th>
<th data-options="field:'productid',width:100">Product</th>
<th data-options="field:'listprice',width:80,align:'right'">List Price</th>
<th data-options="field:'unitcost',width:80,align:'right'">Unit Cost</th>
<th data-options="field:'attr1',width:250">Attribute</th>
<th data-options="field:'status',width:60,align:'center'">Status</th>
</tr>
</thead>
</table>
</body>
</html>
来源是
http://jsfiddle.net/3L4ej4dx/25/
aaarticlea/png;base64,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" alt="" />
datagrid-filter.js
(function($){
function getPluginName(target){
if ($(target).data('treegrid')){
return 'treegrid';
} else {
return 'datagrid';
}
} var autoSizeColumn1 = $.fn.datagrid.methods.autoSizeColumn;
var loadDataMethod1 = $.fn.datagrid.methods.loadData;
var appendMethod1 = $.fn.datagrid.methods.appendRow;
var deleteMethod1 = $.fn.datagrid.methods.deleteRow;
$.extend($.fn.datagrid.methods, {
autoSizeColumn: function(jq, field){
return jq.each(function(){
var fc = $(this).datagrid('getPanel').find('.datagrid-header .datagrid-filter-c');
fc.hide();
autoSizeColumn1.call($.fn.datagrid.methods, $(this), field);
fc.show();
resizeFilter(this, field);
});
},
loadData: function(jq, data){
jq.each(function(){
$.data(this, 'datagrid').filterSource = null;
});
return loadDataMethod1.call($.fn.datagrid.methods, jq, data);
},
appendRow: function(jq, row){
var result = appendMethod1.call($.fn.datagrid.methods, jq, row);
jq.each(function(){
var state = $(this).data('datagrid');
if (state.filterSource){
state.filterSource.total++;
if (state.filterSource.rows != state.data.rows){
state.filterSource.rows.push(row);
}
}
});
return result;
},
deleteRow: function(jq, index){
jq.each(function(){
var state = $(this).data('datagrid');
var opts = state.options;
if (state.filterSource && opts.idField){
if (state.filterSource.rows == state.data.rows){
state.filterSource.total--;
} else {
for(var i=0; i<state.filterSource.rows.length; i++){
var row = state.filterSource.rows[i];
if (row[opts.idField] == state.data.rows[index][opts.idField]){
state.filterSource.rows.splice(i,1);
state.filterSource.total--;
break;
}
}
}
}
});
return deleteMethod1.call($.fn.datagrid.methods, jq, index);
}
}); var loadDataMethod2 = $.fn.treegrid.methods.loadData;
var appendMethod2 = $.fn.treegrid.methods.append;
var insertMethod2 = $.fn.treegrid.methods.insert;
var removeMethod2 = $.fn.treegrid.methods.remove;
$.extend($.fn.treegrid.methods, {
loadData: function(jq, data){
jq.each(function(){
$.data(this, 'treegrid').filterSource = null;
});
return loadDataMethod2.call($.fn.treegrid.methods, jq, data);
},
append: function(jq, param){
return jq.each(function(){
var state = $(this).data('treegrid');
var opts = state.options;
if (opts.oldLoadFilter){
var rows = translateTreeData(this, param.data, param.parent);
state.filterSource.total += rows.length;
state.filterSource.rows = state.filterSource.rows.concat(rows);
$(this).treegrid('loadData', state.filterSource)
} else {
appendMethod2($(this), param);
}
});
},
insert: function(jq, param){
return jq.each(function(){
var state = $(this).data('treegrid');
var opts = state.options;
if (opts.oldLoadFilter){
var ref = param.before || param.after;
var index = getNodeIndex(param.before || param.after);
var pid = index>=0 ? state.filterSource.rows[index]._parentId : null;
var rows = translateTreeData(this, [param.data], pid);
var newRows = state.filterSource.rows.splice(0, index>=0 ? (param.before ? index : index+1) : (state.filterSource.rows.length));
newRows = newRows.concat(rows);
newRows = newRows.concat(state.filterSource.rows);
state.filterSource.total += rows.length;
state.filterSource.rows = newRows;
$(this).treegrid('loadData', state.filterSource); function getNodeIndex(id){
var rows = state.filterSource.rows;
for(var i=0; i<rows.length; i++){
if (rows[i][opts.idField] == id){
return i;
}
}
return -1;
}
} else {
insertMethod2($(this), param);
}
});
},
remove: function(jq, id){
jq.each(function(){
var state = $(this).data('treegrid');
if (state.filterSource){
var opts = state.options;
var rows = state.filterSource.rows;
for(var i=0; i<rows.length; i++){
if (rows[i][opts.idField] == id){
rows.splice(i, 1);
state.filterSource.total--;
break;
}
}
}
});
return removeMethod2(jq, id);
}
}); var extendedOptions = {
filterMenuIconCls: 'icon-ok',
filterBtnIconCls: 'icon-filter',
filterBtnPosition: 'right',
filterPosition: 'bottom',
remoteFilter: false,
showFilterBar: true,
filterDelay: 400,
filterRules: [],
// specify whether the filtered records need to match ALL or ANY of the applied filters
filterMatchingType: 'all', // possible values: 'all','any'
// filterCache: {},
filterMatcher: function(data){
var name = getPluginName(this);
var dg = $(this);
var state = $.data(this, name);
var opts = state.options;
if (opts.filterRules.length){
var rows = [];
if (name == 'treegrid'){
var rr = {};
$.map(data.rows, function(row){
if (isMatch(row, row[opts.idField])){
rr[row[opts.idField]] = row;
row = getRow(data.rows, row._parentId);
while(row){
rr[row[opts.idField]] = row;
row = getRow(data.rows, row._parentId);
}
}
});
for(var id in rr){
rows.push(rr[id]);
}
} else {
for(var i=0; i<data.rows.length; i++){
var row = data.rows[i];
if (isMatch(row, i)){
rows.push(row);
}
}
}
data = {
total: data.total - (data.rows.length - rows.length),
rows: rows
};
}
return data; function isMatch(row, index){
var rules = opts.filterRules;
if (!rules.length){return true;}
for(var i=0; i<rules.length; i++){
var rule = rules[i];
var source = row[rule.field];
var col = dg.datagrid('getColumnOption', rule.field);
if (col && col.formatter){
source = col.formatter(row[rule.field], row, index);
}
if (source == undefined){
source = '';
}
var op = opts.operators[rule.op];
// if (!op.isMatch(source, rule.value)){return false}
var matched = op.isMatch(source, rule.value);
if (opts.filterMatchingType == 'any'){
if (matched){return true;}
} else {
if (!matched){return false;}
}
}
return opts.filterMatchingType == 'all';
}
function getRow(rows, id){
for(var i=0; i<rows.length; i++){
var row = rows[i];
if (row[opts.idField] == id){
return row;
}
}
return null;
}
},
defaultFilterType: 'text',
defaultFilterOperator: 'contains',
defaultFilterOptions: {
onInit: function(target){
var name = getPluginName(target);
var opts = $(target)[name]('options');
var field = $(this).attr('name');
var input = $(this);
if (input.data('textbox')){
input = input.textbox('textbox');
}
input.unbind('.filter').bind('keydown.filter', function(e){
var t = $(this);
if (this.timer){
clearTimeout(this.timer);
}
if (e.keyCode == 13){
_doFilter();
} else {
this.timer = setTimeout(function(){
_doFilter();
}, opts.filterDelay);
}
});
function _doFilter(){
var rule = $(target)[name]('getFilterRule', field);
var value = input.val();
if (value != ''){
if ((rule && rule.value!=value) || !rule){
$(target)[name]('addFilterRule', {
field: field,
op: opts.defaultFilterOperator,
value: value
});
$(target)[name]('doFilter');
}
} else {
if (rule){
$(target)[name]('removeFilterRule', field);
$(target)[name]('doFilter');
}
}
}
}
},
filterStringify: function(data){
return JSON.stringify(data);
},
onClickMenu: function(item,button){}
};
$.extend($.fn.datagrid.defaults, extendedOptions);
$.extend($.fn.treegrid.defaults, extendedOptions); // filter types
$.fn.datagrid.defaults.filters = $.extend({}, $.fn.datagrid.defaults.editors, {
label: {
init: function(container, options){
return $('<span></span>').appendTo(container);
},
getValue: function(target){
return $(target).html();
},
setValue: function(target, value){
$(target).html(value);
},
resize: function(target, width){
$(target)._outerWidth(width)._outerHeight(22);
}
}
});
$.fn.treegrid.defaults.filters = $.fn.datagrid.defaults.filters; // filter operators
$.fn.datagrid.defaults.operators = {
nofilter: {
text: 'No Filter'
},
contains: {
text: 'Contains',
isMatch: function(source, value){
source = String(source);
value = String(value);
return source.toLowerCase().indexOf(value.toLowerCase()) >= 0;
}
},
equal: {
text: 'Equal',
isMatch: function(source, value){
return source == value;
}
},
notequal: {
text: 'Not Equal',
isMatch: function(source, value){
return source != value;
}
},
beginwith: {
text: 'Begin With',
isMatch: function(source, value){
source = String(source);
value = String(value);
return source.toLowerCase().indexOf(value.toLowerCase()) == 0;
}
},
endwith: {
text: 'End With',
isMatch: function(source, value){
source = String(source);
value = String(value);
return source.toLowerCase().indexOf(value.toLowerCase(), source.length - value.length) !== -1;
}
},
less: {
text: 'Less',
isMatch: function(source, value){
return source < value;
}
},
lessorequal: {
text: 'Less Or Equal',
isMatch: function(source, value){
return source <= value;
}
},
greater: {
text: 'Greater',
isMatch: function(source, value){
return source > value;
}
},
greaterorequal: {
text: 'Greater Or Equal',
isMatch: function(source, value){
return source >= value;
}
}
};
$.fn.treegrid.defaults.operators = $.fn.datagrid.defaults.operators; function resizeFilter(target, field){
var toFixColumnSize = false;
var dg = $(target);
var header = dg.datagrid('getPanel').find('div.datagrid-header');
var tr = header.find('.datagrid-header-row:not(.datagrid-filter-row)');
var ff = field ? header.find('.datagrid-filter[name="'+field+'"]') : header.find('.datagrid-filter');
ff.each(function(){
var name = $(this).attr('name');
var col = dg.datagrid('getColumnOption', name);
var cc = $(this).closest('div.datagrid-filter-c');
var btn = cc.find('a.datagrid-filter-btn');
var cell = tr.find('td[field="'+name+'"] .datagrid-cell');
var cellWidth = cell._outerWidth();
if (cellWidth != _getContentWidth(cc)){
this.filter.resize(this, cellWidth - btn._outerWidth());
}
if (cc.width() > col.boxWidth+col.deltaWidth-1){
col.boxWidth = cc.width() - col.deltaWidth + 1;
col.width = col.boxWidth + col.deltaWidth;
toFixColumnSize = true;
}
});
if (toFixColumnSize){
$(target).datagrid('fixColumnSize');
} function _getContentWidth(cc){
var w = 0;
$(cc).children(':visible').each(function(){
w += $(this)._outerWidth();
});
return w;
}
} function getFilterComponent(target, field){
var header = $(target).datagrid('getPanel').find('div.datagrid-header');
return header.find('tr.datagrid-filter-row td[field="'+field+'"] .datagrid-filter');
} /**
* get filter rule index, return -1 if not found.
*/
function getRuleIndex(target, field){
var name = getPluginName(target);
var rules = $(target)[name]('options').filterRules;
for(var i=0; i<rules.length; i++){
if (rules[i].field == field){
return i;
}
}
return -1;
} function getFilterRule(target, field){
var name = getPluginName(target);
var rules = $(target)[name]('options').filterRules;
var index = getRuleIndex(target, field);
if (index >= 0){
return rules[index];
} else {
return null;
}
} function addFilterRule(target, param){
var name = getPluginName(target);
var opts = $(target)[name]('options');
var rules = opts.filterRules; if (param.op == 'nofilter'){
removeFilterRule(target, param.field);
} else {
var index = getRuleIndex(target, param.field);
if (index >= 0){
$.extend(rules[index], param);
} else {
rules.push(param);
}
} var input = getFilterComponent(target, param.field);
if (input.length){
if (param.op != 'nofilter'){
input[0].filter.setValue(input, param.value);
}
var menu = input[0].menu;
if (menu){
menu.find('.'+opts.filterMenuIconCls).removeClass(opts.filterMenuIconCls);
var item = menu.menu('findItem', opts.operators[param.op]['text']);
menu.menu('setIcon', {
target: item.target,
iconCls: opts.filterMenuIconCls
});
}
}
} function removeFilterRule(target, field){
var name = getPluginName(target);
var dg = $(target);
var opts = dg[name]('options');
if (field){
var index = getRuleIndex(target, field);
if (index >= 0){
opts.filterRules.splice(index, 1);
}
_clear([field]);
} else {
opts.filterRules = [];
var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields'));
_clear(fields);
} function _clear(fields){
for(var i=0; i<fields.length; i++){
var input = getFilterComponent(target, fields[i]);
if (input.length){
input[0].filter.setValue(input, '');
var menu = input[0].menu;
if (menu){
menu.find('.'+opts.filterMenuIconCls).removeClass(opts.filterMenuIconCls);
}
}
}
}
} function doFilter(target){
var name = getPluginName(target);
var state = $.data(target, name);
var opts = state.options;
if (opts.remoteFilter){
$(target)[name]('load');
} else {
$(target)[name]('getPager').pagination('refresh', {pageNumber:1});
$(target)[name]('options').pageNumber = 1;
$(target)[name]('loadData', state.filterSource || state.data);
}
} function translateTreeData(target, children, pid){
var opts = $(target).treegrid('options');
if (!children || !children.length){return []}
var rows = [];
$.map(children, function(item){
item._parentId = pid;
rows.push(item);
rows = rows.concat(translateTreeData(target, item.children, item[opts.idField]));
});
$.map(rows, function(row){
row.children = undefined;
});
return rows;
} function myLoadFilter(data, parentId){
var target = this;
var name = getPluginName(target);
var state = $.data(target, name);
var opts = state.options; if (name == 'datagrid' && $.isArray(data)){
data = {
total: data.length,
rows: data
};
} else if (name == 'treegrid' && $.isArray(data)){
var rows = translateTreeData(target, data, parentId);
data = {
total: rows.length,
rows: rows
}
}
if (!opts.remoteFilter){
if (!state.filterSource){
state.filterSource = data;
} else {
if (!opts.isSorting) {
if (name == 'datagrid'){
state.filterSource = data;
} else {
state.filterSource.total += data.length;
state.filterSource.rows = state.filterSource.rows.concat(data.rows);
if (parentId){
return opts.filterMatcher.call(target, data);
}
}
} else {
opts.isSorting = undefined;
}
}
if (!opts.remoteSort && opts.sortName){
var names = opts.sortName.split(',');
var orders = opts.sortOrder.split(',');
var dg = $(target);
state.filterSource.rows.sort(function(r1,r2){
var r = 0;
for(var i=0; i<names.length; i++){
var sn = names[i];
var so = orders[i];
var col = dg.datagrid('getColumnOption', sn);
var sortFunc = col.sorter || function(a,b){
return a==b ? 0 : (a>b?1:-1);
};
r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);
if (r != 0){
return r;
}
}
return r;
});
}
data = opts.filterMatcher.call(target, {
total: state.filterSource.total,
rows: state.filterSource.rows
}); if (opts.pagination){
var dg = $(target);
var pager = dg[name]('getPager');
pager.pagination({
onSelectPage:function(pageNum, pageSize){
opts.pageNumber = pageNum;
opts.pageSize = pageSize;
pager.pagination('refresh',{
pageNumber:pageNum,
pageSize:pageSize
});
//dg.datagrid('loadData', state.filterSource);
dg[name]('loadData', state.filterSource);
},
onBeforeRefresh:function(){
dg[name]('reload');
return false;
}
});
if (name == 'datagrid'){
var start = (opts.pageNumber-1)*parseInt(opts.pageSize);
var end = start + parseInt(opts.pageSize);
data.rows = data.rows.slice(start, end);
} else {
var topRows = [];
var childRows = [];
$.map(data.rows, function(row){
row._parentId ? childRows.push(row) : topRows.push(row);
});
data.total = topRows.length;
var start = (opts.pageNumber-1)*parseInt(opts.pageSize);
var end = start + parseInt(opts.pageSize);
data.rows = topRows.slice(start, end).concat(childRows);
}
}
$.map(data.rows, function(row){
row.children = undefined;
});
}
return data;
} function init(target, filters){
filters = filters || [];
var name = getPluginName(target);
var state = $.data(target, name);
var opts = state.options;
if (!opts.filterRules.length){
opts.filterRules = [];
}
opts.filterCache = opts.filterCache || {};
var dgOpts = $.data(target, 'datagrid').options; var onResize = dgOpts.onResize;
dgOpts.onResize = function(width,height){
resizeFilter(target);
onResize.call(this, width, height);
}
var onBeforeSortColumn = dgOpts.onBeforeSortColumn;
dgOpts.onBeforeSortColumn = function(sort, order){
var result = onBeforeSortColumn.call(this, sort, order);
if (result != false){
opts.isSorting = true;
}
return result;
}; var onResizeColumn = opts.onResizeColumn;
opts.onResizeColumn = function(field,width){
var fc = $(this).datagrid('getPanel').find('.datagrid-header .datagrid-filter-c');
fc.hide();
$(target).datagrid('fitColumns');
if (opts.fitColumns){
resizeFilter(target);
} else {
resizeFilter(target, field);
}
fc.show();
onResizeColumn.call(target, field, width);
};
var onBeforeLoad = opts.onBeforeLoad;
opts.onBeforeLoad = function(param1, param2){
if (param1){
param1.filterRules = opts.filterStringify(opts.filterRules);
}
if (param2){
param2.filterRules = opts.filterStringify(opts.filterRules);
}
var result = onBeforeLoad.call(this, param1, param2);
if (result != false){
if (name == 'datagrid'){
state.filterSource = null;
} else if (name == 'treegrid' && state.filterSource){
if (param1){
var id = param1[opts.idField]; // the id of the expanding row
var rows = state.filterSource.rows || [];
for(var i=0; i<rows.length; i++){
if (id == rows[i]._parentId){ // the expanding row has children
return false;
}
}
} else {
state.filterSource = null;
}
}
}
return result;
}; // opts.loadFilter = myLoadFilter;
opts.loadFilter = function(data, parentId){
var d = opts.oldLoadFilter.call(this, data, parentId);
return myLoadFilter.call(this, d, parentId);
}; initCss();
createFilter(true);
createFilter();
if (opts.fitColumns){
setTimeout(function(){
resizeFilter(target);
}, 0);
} $.map(opts.filterRules, function(rule){
addFilterRule(target, rule);
}); function initCss(){
if (!$('#datagrid-filter-style').length){
$('head').append(
'<style id="datagrid-filter-style">' +
'a.datagrid-filter-btn{display:inline-block;width:22px;height:22px;margin:0;vertical-align:top;cursor:pointer;opacity:0.6;filter:alpha(opacity=60);}' +
'a:hover.datagrid-filter-btn{opacity:1;filter:alpha(opacity=100);}' +
'.datagrid-filter-row .textbox,.datagrid-filter-row .textbox .textbox-text{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;}' +
'.datagrid-filter-row input{margin:0;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;}' +
'.datagrid-filter-cache{position:absolute;width:10px;height:10px;left:-99999px;}' +
'</style>'
);
}
} /**
* create filter component
*/
function createFilter(frozen){
var dc = state.dc;
var fields = $(target).datagrid('getColumnFields', frozen);
if (frozen && opts.rownumbers){
fields.unshift('_');
}
var table = (frozen?dc.header1:dc.header2).find('table.datagrid-htable'); // clear the old filter component
table.find('.datagrid-filter').each(function(){
if (this.filter.destroy){
this.filter.destroy(this);
}
if (this.menu){
$(this.menu).menu('destroy');
}
});
table.find('tr.datagrid-filter-row').remove(); var tr = $('<tr class="datagrid-header-row datagrid-filter-row"></tr>');
if (opts.filterPosition == 'bottom'){
tr.appendTo(table.find('tbody'));
} else {
tr.prependTo(table.find('tbody'));
}
if (!opts.showFilterBar){
tr.hide();
} for(var i=0; i<fields.length; i++){
var field = fields[i];
var col = $(target).datagrid('getColumnOption', field);
var td = $('<td></td>').attr('field', field).appendTo(tr);
if (col && col.hidden){
td.hide();
}
if (field == '_'){
continue;
}
if (col && (col.checkbox || col.expander)){
continue;
} var fopts = getFilter(field);
if (fopts){
$(target)[name]('destroyFilter', field); // destroy the old filter component
} else {
fopts = $.extend({}, {
field: field,
type: opts.defaultFilterType,
options: opts.defaultFilterOptions
});
} var div = opts.filterCache[field];
if (!div){
div = $('<div class="datagrid-filter-c"></div>').appendTo(td);
var filter = opts.filters[fopts.type];
var input = filter.init(div, fopts.options||{});
input.addClass('datagrid-filter').attr('name', field);
input[0].filter = filter;
input[0].menu = createFilterButton(div, fopts.op);
if (fopts.options){
if (fopts.options.onInit){
fopts.options.onInit.call(input[0], target);
}
} else {
opts.defaultFilterOptions.onInit.call(input[0], target);
}
opts.filterCache[field] = div;
resizeFilter(target, field);
} else {
div.appendTo(td);
}
}
} function createFilterButton(container, operators){
if (!operators){return null;} var btn = $('<a class="datagrid-filter-btn"> </a>').addClass(opts.filterBtnIconCls);
if (opts.filterBtnPosition == 'right'){
btn.appendTo(container);
} else {
btn.prependTo(container);
} var menu = $('<div></div>').appendTo('body');
$.map(['nofilter'].concat(operators), function(item){
var op = opts.operators[item];
if (op){
$('<div></div>').attr('name', item).html(op.text).appendTo(menu);
}
});
menu.menu({
alignTo:btn,
onClick:function(item){
var btn = $(this).menu('options').alignTo;
var td = btn.closest('td[field]');
var field = td.attr('field');
var input = td.find('.datagrid-filter');
var value = input[0].filter.getValue(input); if (opts.onClickMenu.call(target, item, btn, field) == false){
return;
} addFilterRule(target, {
field: field,
op: item.name,
value: value
}); doFilter(target);
}
}); btn[0].menu = menu;
btn.bind('click', {menu:menu}, function(e){
$(this.menu).menu('show');
return false;
});
return menu;
} function getFilter(field){
for(var i=0; i<filters.length; i++){
var filter = filters[i];
if (filter.field == field){
return filter;
}
}
return null;
}
} $.extend($.fn.datagrid.methods, {
enableFilter: function(jq, filters){
return jq.each(function(){
var name = getPluginName(this);
var opts = $.data(this, name).options;
if (opts.oldLoadFilter){
if (filters){
$(this)[name]('disableFilter');
} else {
return;
}
}
opts.oldLoadFilter = opts.loadFilter;
init(this, filters);
$(this)[name]('resize');
if (opts.filterRules.length){
if (opts.remoteFilter){
doFilter(this);
} else if (opts.data){
doFilter(this);
}
}
});
},
disableFilter: function(jq){
return jq.each(function(){
var name = getPluginName(this);
var state = $.data(this, name);
var opts = state.options;
var dc = $(this).data('datagrid').dc;
var div = dc.view.children('.datagrid-filter-cache');
if (!div.length){
div = $('<div class="datagrid-filter-cache"></div>').appendTo(dc.view);
}
for(var field in opts.filterCache){
$(opts.filterCache[field]).appendTo(div);
}
var data = state.data;
if (state.filterSource){
data = state.filterSource;
$.map(data.rows, function(row){
row.children = undefined;
});
}
$(this)[name]({
data: data,
loadFilter: (opts.oldLoadFilter||undefined),
oldLoadFilter: null
});
});
},
destroyFilter: function(jq, field){
return jq.each(function(){
var name = getPluginName(this);
var state = $.data(this, name);
var opts = state.options;
if (field){
_destroy(field);
} else {
for(var f in opts.filterCache){
_destroy(f);
}
$(this).datagrid('getPanel').find('.datagrid-header .datagrid-filter-row').remove();
$(this).data('datagrid').dc.view.children('.datagrid-filter-cache').remove();
opts.filterCache = {};
$(this)[name]('resize');
$(this)[name]('disableFilter');
} function _destroy(field){
var c = $(opts.filterCache[field]);
var input = c.find('.datagrid-filter');
if (input.length){
var filter = input[0].filter;
if (filter.destroy){
filter.destroy(input[0]);
}
}
c.find('.datagrid-filter-btn').each(function(){
$(this.menu).menu('destroy');
});
c.remove();
opts.filterCache[field] = undefined;
}
});
},
getFilterRule: function(jq, field){
return getFilterRule(jq[0], field);
},
addFilterRule: function(jq, param){
return jq.each(function(){
addFilterRule(this, param);
});
},
removeFilterRule: function(jq, field){
return jq.each(function(){
removeFilterRule(this, field);
});
},
doFilter: function(jq){
return jq.each(function(){
doFilter(this);
});
},
getFilterComponent: function(jq, field){
return getFilterComponent(jq[0], field);
},
resizeFilter: function(jq, field){
return jq.each(function(){
resizeFilter(this, field);
});
}
});
})(jQuery);