为了账号安全,请及时绑定邮箱和手机立即绑定

JQGrid工具栏搜索:搜索列的多个单词

/ 猿问

JQGrid工具栏搜索:搜索列的多个单词

慕仰8121524 2019-11-19 14:53:51

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



查看完整描述

3 回答

?
HUX布斯

一个有趣的问题!


我创建了一个演示,演示了如何实现多字搜索:

相应的代码是:


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

        }

    };

更新: 免费的jqGrid支持自定义过滤搜索Operation,这使得上述情况的实现非常容易。


查看完整回答
反对 回复 2019-11-19
?
饮歌长啸

为什么您的函数使此过滤器字符串过滤器{“ 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“:”аморт“}]} 

查看完整回答
反对 回复 2019-11-19
?
尚方宝剑之说

首先请回答以下问题:您是否有一些测试用例,我的演示工作不正确?可能我误解了您的问题,并回答了另一个问题?你可以说俄语。您首先应该描述您的问题。这datatype你了。如果您有'local'数据类型,则不需要o不执行任何操作。如果您具有'json''xml'数据类型,那么问题可能仅仅是因为您没有实现filtersparameter的完全支持。我的演示包括multipleGroup: true搜索选项。尝试使用对话框进行搜索并检查filters

查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 43 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信