Ricerca barra degli strumenti JQGrid: cerca più parole per una colonna

Io uso la ricerca della barra degli strumenti. Puoi fare una ricerca di più parole per una colonna? Il delimitatore è uno spazio e la ricerca dovrebbe essere eseguita utilizzando l’operatore Like. Di conseguenza, la ricerca dovrebbe restituire tutte le righe che hanno incontrato tutte le parole nella stringa di ricerca, indipendentemente dall’ordine in cui si trovano in un campo di riga. Ad esempio c’è una colonna “Nome prodotto”, voglio trovare tutte le righe che hanno il nome del prodotto contiene la parola “leva” e contiene la parola “sinistra”.

Una domanda interessante!

Ho creato la demo che dimostra come implementare la ricerca in più parole:

inserisci la descrizione dell'immagine qui

Il codice corrispondente è:

$grid.jqGrid('filterToolbar', { stringResult: true, defaultSearch: "cn", beforeSearch: function () { modifySearchingFilter.call(this, ' '); } }); 

dove modifySearchingFilter I ha definito nel modo:

 var modifySearchingFilter = function (separator) { var i, l, rules, rule, parts, j, group, str, filters = $.parseJSON(this.p.postData.filters); if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) { rules = filters.rules; for (i = 0; i < rules.length; i++) { rule = rules[i]; if (rule.op === 'cn') { // make modifications only for the 'contains' operation parts = rule.data.split(separator); if (parts.length > 1) { if (typeof filters.groups === 'undefined') { filters.groups = []; } group = { groupOp: 'OR', groups: [], rules: [] }; filters.groups.push(group); for (j = 0, l = parts.length; j < l; j++) { str = parts[j]; if (str) { // skip empty '', which exist in case of two separaters of once group.rules.push({ data: parts[j], op: rule.op, field: rule.field }); } } rules.splice(i, 1); i--; // to skip i++ } } } this.p.postData.filters = JSON.stringify(filters); } }; 

AGGIORNAMENTO: Free jqGrid supporta la ricerca di filtri personalizzati Operation , che rende molto facile l'implementazione di tali scenari come sopra.