过滤SlickGrid时的部分匹配

时间:2013-08-04 07:25:29

标签: javascript filter slickgrid header-row

由于我没有足够的声誉来评论,我将此作为一个单独的问题发布。我正在尝试实现用户LFReD给出的解决方案作为这个问题的答案:

How to perform partial matches when filtering Slickgrid using column-level headers?

当我从原始的SlickGrid示例中使用它时:

function filter(item) {
for (var columnId in columnFilters) {
  if (columnId !== undefined && columnFilters[columnId] !== "") {
    var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
    if (item[c.field] != columnFilters[columnId]) {
      return false;
    }
  }
}
return true;
}

当我输入完整的单词时,它会起作用。不执行部分匹配。

但是,当我用

替换代码时,要执行部分匹配
function filter(item) {
for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
        if (item[c.field].indexOf(columnFilters[columnId]) == -1) {
            return false;
        }
    }
}
    return true;
}

我在控制台中收到错误javascript错误,其中显示“未捕获的TypeError:对象1没有方法'indexOf'”

我无法弄清楚代码中缺少的内容。由于以前的代码工作正常,这意味着我已经在HTML代码中包含了必要的脚本。似乎仍然缺少一些东西。我哪里错了?

1 个答案:

答案 0 :(得分:1)

更改以下行:

if (item[c.field].indexOf(columnFilters[columnId]) == -1) {

为:

if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {

最终产品:

function filter(item) {
  for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
      var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
      if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {
        return false;
      }
    }
  }
  return true;
}