【问题标题】:Searching for a value in a column, with multiple values, in Jqgrid在Jqgrid中搜索具有多个值的列中的值
【发布时间】:2014-12-22 12:54:45
【问题描述】:

假设我有一个包含多个值的列,例如假设我们有一个包含教师姓名和部门(逗号分隔)的表。其中一名教师可以属于多个部门。

我想搜索包含以在搜索字段中键入的字母开头的部门的行。

现在我正在使用 bw 过滤器,它仅适用于逗号分隔列表中的第一个条目(因为它将整个列表作为单个字符串)。

【问题讨论】:

  • 您使用哪个datatype?是本地搜索还是需要向服务器发送相应的搜索请求?您是否使用搜索对话框 (Advanced Searching)、Toolbar Searching 或其他自定义搜索?
  • 感谢您的回复。我在本地搜索并使用工具栏搜索。

标签: javascript jquery jqgrid


【解决方案1】:

jqGrid 不会为您提供任何自定义操作的可能性,例如在逗号分隔的子字符串中搜索“开始”。所以必须使用标准操作。另一方面,可以子类化 jqGrid 在过滤期间使用的$.jgrid.from 对象的方法。我已经发布了其他一些演示该技术的答案。这仍然不是那么容易。所以我创建了the demo,它演示了如何子类化$.jgrid.fromstartsWith 方法,以便它以您需要的特殊方式工作,但只能在特殊列中(参见下面代码中的常量"departments"

var oldFrom = $.jgrid.from;
$.jgrid.from = function (source, initalQuery) {
    var result = oldFrom(source, initalQuery),
        old_startsWith = result.startsWith;

    result.startsWith = function (f, v) {
        if (f !== "departments") {
            return old_startsWith.call(result, f, v);
        }
        var self = result, val = (v === null) ? f : v, length = val.toString().length;
        self._append(
            'jQuery.map(' +
                self._getStr('jQuery.jgrid.getAccessor(this,\'' + f + '\')') +
                '.split(","),function(item) {if (item.substr(0,' + length + ')===' +
                self._getStr('"' + self._toStr(v) + '"') +
                ") { return item; }}).length > 0"
        );
        self._setCommand(self.startsWith, f);
        self._resetNegate();
        return self;
    };
    return result;
};

如果对字符串“d2”的列“departments”进行过滤,则会看到以下结果

【讨论】:

  • 我浏览了其他答案,但无法实现所需的功能。但是上面的代码就像魅力一样! :) 感谢您的帮助。
  • @Vivek:小常识:我看到你从来没有使用过voting(答案或问题的最少部分上的向上箭头按钮)。您每天最多有权投票 30 个答案或问题(请参阅 here)。通过投票,您可以为搜索引擎提供提示,并帮助 stackoverflow 的其他用户查找有关 stackoverflow 的信息。 因此,如果您想帮助其他人,您应该使用您的投票权并投票给您认为有用和有趣以及您会推荐其他人的所有 stackoverflow 信息
猜你喜欢
  • 1970-01-01
  • 2017-11-06
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多