在搜索对话框中添加新运算符

Adding a new operator in the search dialog

作为过滤器运算符,您可以从以下选项中进行选择: 'equal','not equal','less','less or equal','greater','greater or equal','begins with','does not begin with','is in'、'is not in'、'ends with'、'does not end with'、'contains' 和 'does not contain'。 我想在此列表中添加一个额外的操作员。有人能指出我实现这一目标的正确方向吗?

应用程序正在使用对话框进行过滤,我们目前(非常高兴!)使用 free-jqgrid 4.15.0。

如果您想了解用例:我们的应用程序有一个日期字段,一个非常常见的过滤器是过滤记录 "due within X days from now"。为了获得最佳可用性,我们不喜欢用户必须每天更改日期过滤器。

免费的 jqGrid 允许根据 customSortOperations 选项定义自定义 searching/filtering 操作。默认情况下,相应的自定义比较操作将有两个操作数。应在 customUnaryOperations 选项中另外指定一元运算。该功能最初在 the wiki article 中进行了描述。可以在 Whosebug 上找到一些使用该功能的示例。

customSortOperations中定义的自定义compare/filter运算符需要包含在数组searchoptions.sopt中相应列的定义中。 The demo 使用以下代码:

colModel: [
    ...
    { name: "name", align: "justify", width: 87, editrules: { required: true },
      autoResizing: { minColWidth: 87 },
      createColumnIndex: true,
      searchoptions: {
        generateDatalist: true,
        sopt: [ "cn", "em", "nm", "in", "ni",
            "teq", "tne",
            "eq", "bw", "ew", "bn", "nc", "en" ],
        clearSearch: true
      } },
    ...
],
customUnaryOperations: ["em", "nm"],
customSortOperations: {
    em: {
      operand: "=''",
      text: "is empty",
      filter: function (options) {
        var v = options.item[options.cmName];
        if (v === undefined || v === null || v === "") {
          return true;
        }
      }
    },
    nm: {
      operand: "!=''",
      text: "isn't empty",
      filter: function (options) {
        var v = options.item[options.cmName];
        if (v !== undefined && v !== null && v !== "") {
          return true;
        }
      }
    },
    teq: {
        operand: "==",
        text: "Turkish insensitive \"equal\"",
        filter: function (options) {
            var fieldData = String(options.item[options.cmName]).replace(/i/g,'İ').toUpperCase(),
                searchValue = options.searchValue.replace(/i/g,'İ').toUpperCase();
            return fieldData === searchValue;
        }
    },
    tne: {
        operand: "!=",
        text: "Turkish insensitive \"not equal\"",
        filter: function (options) {
            var fieldData = String(options.item[options.cmName]).replace(/i/g,'İ').toUpperCase(),
                searchValue = options.searchValue.replace(/i/g,'İ').toUpperCase();
            return fieldData !== searchValue;
        }
    }
},

代码定义了4个自定义操作:"em"、"nm"、"teq"、"tne",其中"em"("is empty")和"nm" ("isn't empty") 是一元运算。我从我的旧答案中得到代码: and .

自定义操作在搜索工具栏和搜索对话框中可用:

我认为这是您需要的功能。我建议您另外阅读 another answer,这接近您的要求。我认为简单修改代码就可以解决你的问题。