【问题标题】:JQGrid Toolbar Searching: search for multiple words for a columnJQGrid 工具栏搜索:为一列搜索多个单词
【发布时间】:2012-02-15 14:46:15
【问题描述】:

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

【问题讨论】:

    标签: search jqgrid


    【解决方案1】:

    一个有趣的问题!

    我创建了the demo,它演示了如何实现多词搜索:

    对应的代码是:

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

    modifySearchingFilter我在哪里定义的方式:

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

    更新:Free jqGrid 支持Custom filtering searching Operation,这使得上述场景的实现变得非常容易。

    【讨论】:

    • 为什么你的函数使用这个过滤器字符串过滤器 {"groupOp":"AND","rules":[],"groups":[{"groupOp":"AND","groups": [],"rules":[{"data":"задний","op":"cn","field":"ent_name"},{"data":"аморт","op":"cn" ,"field":"ent_name"}]}]} 但是复杂搜索会生成这个过滤器字符串过滤器 {"groupOp":"AND","rules":[{"field":"ent_name","op":"cn ","data":"задний"},{"field":"ent_name","op":"cn","data":"аморт"}]}
    • @DmitriyLuchkin:抱歉,我不完全理解你的问题。你有一些我的演示工作出错的测试用例吗?
    • @DmitriyLuchkin:您的问题可能是您将groups 部分中的groupOp='OR' 操作与主要的groupOp='AND' 操作混淆了?
    • 我试过你的功能,但不是我想要的。过滤器字符串的结构不同于生成复杂搜索的结构。我展示了它们进行比较。我不得不修改你的功能。我从过滤器中排除了字符串“组”,搜索开始正常工作。我可以用俄语和你交谈吗?
    • @DmitriyLuchkin:首先请回答这个问题:您是否有一些测试用例,其中 my demo 工作错误?可能我误解了你的问题并回答了另一个问题?你可以用俄语交谈。你应该首先描述你的问题。你有哪个datatype。如果你有'local' 数据类型,你不需要什么都不做。如果您有'json''xml' 数据类型,那么您的问题可能只是因为您没有实现完全支持filters 参数。我的演示包括multipleGroup: true 搜索选项。尝试使用对话框进行搜索并检查filters
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2015-09-26
    • 2011-07-26
    • 2023-03-19
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多