JQGrid 工具栏搜索:为一列搜索多个单词 [英] JQGrid Toolbar Searching: search for multiple words for a column

查看:19
本文介绍了JQGrid 工具栏搜索:为一列搜索多个单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用工具栏搜索.您可以为一列搜索多个单词吗?分隔符是一个空格,应该使用 Like 运算符进行搜索.因此,搜索应该返回满足搜索字符串中所有单词的所有行,无论它们在行字段中的顺序如何.例如有一列产品名称",我想查找所有产品名称包含单词lever"并且包含单词left"的行.

解决方案

一个有趣的问题!

我创建了 支持 自定义过滤搜索操作,这样的场景的实现非常简单以上.

I use the Toolbar Searching. Can you do a search for multiple words for a column? The delimiter is a space and the search should be done using the Like operator. As a result, the search should return all rows that have met all the words in the search string, no matter in what order they go in a field of row. For example there is a column "Product Name", I want to find all rows that have product name contains the word "lever" and contains the word "left."

解决方案

An interesting question!

I created the demo which demonstrate how to implement multi-word searching:

The corresponding code is:

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

where modifySearchingFilter I defined in the way:

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);
        }
    };

UPDATE: Free jqGrid supports Custom filtering searching Operation, which makes very easy the implementation of such scenarios like above.

这篇关于JQGrid 工具栏搜索:为一列搜索多个单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆