【问题标题】:slickgrid + searching multiple columnslickgrid +搜索多列
【发布时间】:2012-03-16 19:46:01
【问题描述】:

如何在我的 grails 应用程序中使用 slickGrid 一次在多个列中进行搜索?

https://github.com/mleibman/SlickGrid/tree/master/examples

【问题讨论】:

    标签: slickgrid


    【解决方案1】:

    为了在多列中搜索(通过 ajax 从服务器检索的数据),我做了以下操作:

    使用过滤器代码如图: http://mleibman.github.com/SlickGrid/examples/example4-model.html,但将“myFilter”函数中的代码更改为:

    function myFilter(item, args) {
        if (args.searchString != "" && item["field1"].indexOf(args.searchString) == -1 &&
                                       item["field2"].indexOf(args.searchString) == -1 &&
                                       item["field3"].indexOf(args.searchString) == -1)                                         
        {
            return false;
        }
        return true;
    
    }
    

    等等...希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      这是多列搜索的代码。

      var dataView = new Slick.Data.DataView();
      var slickGrid = new Slick.Grid($('#grid_div'), dataView, gridColumns, gridOptions);
      
      $('#search').keyup(function(e) {
         // clear on Esc
         if (e.which == 27) {
            this.value = "";
             }
      
          var searchList = $.trim(this.value.toLowerCase()).split(' ');
          dataView.setFilter(gridFilter);  
          slickGrid.invalidate();
          this.focus();
      
      });
      
      function gridFilter (rec) {
                      var found;
      
                      for (i = 0; i < gridSearchList.length; i += 1) {
                          found = false;
                          $.each(rec, function(obj, objValue) {
                              if (typeof objValue !== 'undefined' && objValue != null 
                              && objValue.toString().toLowerCase().indexOf(gridSearchList[i]) != -1) {
                                  found = true;
                                  return false; //this breaks the $.each loop
                              }
                          });
                          if (!found) {
                              return false;
                          }
                      }
      
                      return true;
                  }
      

      【讨论】:

      • 是的..只需使用空格分隔符键入您的关键字..这应该可以
      • 总是 WC .. 甚至你可以在执行中添加延迟,以便更快地工作..参考下面的链接.. stackoverflow.com/questions/12858069/…
      • 我不明白 gridSearchList 是什么。这是他需要搜索的列的数组吗?这怎么可能是空格分隔符?
      • 我坚持这一点。我开始了一个关于这个的话题。如果你愿意帮忙。 stackoverflow.com/questions/20699820/…
      • 什么是gridSearchList?
      【解决方案3】:

      这适用于空格分隔符:

      var grid;
      var dataView;
      var searchList = [];
      
      function myFilter(item, args) {
          var mnull = 0, optnull = 0, l = searchList.length, len = grid.getColumns().length;
          for (var i = 0; i < l; i++) {
              for (var j = 0; j < len; j++) {
                  if (item[grid.getColumns()[j].field].toLowerCase().indexOf(searchList[i]) == -1) {mnull++}
              }
              if (mnull == len) {optnull++}
              mnull = 0;
          }
          /* For searching like with operator "OR" 
          if (optnull == l && optnull != 0) {return false;}
          */
          if (optnull != 0) {return false;}
          return true;
      }
      
      jQuery(function ($) {
          dataView = new Slick.Data.DataView();
          grid = new Slick.Grid($("#container"), dataView, columns, options);
      
          $("#txtSearch").keyup(function (e) {
              // clear on Esc
              if (e.which == 27) {
                  this.value = "";
              }
              searchList = $.trim(this.value.toLowerCase()).split(' ');
              dataView.refresh();
          });
      
          dataView.beginUpdate();
          dataView.setItems(data);
          dataView.setFilter(myFilter);
          dataView.endUpdate();
      });
      

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 1970-01-01
        • 2021-05-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多