【问题标题】:Datatables - how to pass search parameter in a url数据表 - 如何在 url 中传递搜索参数
【发布时间】:2012-06-28 08:13:45
【问题描述】:

我希望能够创建一个指向带有数据表的页面的链接,该数据表将在 url 中传递搜索参数值。目标是使用搜索值参数预先过滤打开数据表的页面。

我已经设置了一个 jsfiddle 来处理一些示例数据。
http://jsfiddle.net/lbriquet/9CxYT/10/

这个想法是向 jsfiddle url 添加一个参数,以便页面显示时搜索输入值设置为“firefox”,例如,过滤表以仅显示搜索匹配项。

任何帮助将不胜感激!

【问题讨论】:

    标签: url search filter datatables parameter-passing


    【解决方案1】:

    这是一个老问题,但在寻找解决方案时仍然会弹出很高。这是我为使它工作所做的工作。

    $(document).ready( function() {
      
      // First, get the search parameter. Here I use example.com#search=yourkeyword
        var searchHash = location.hash.substr(1),
            searchString = searchHash.substr(searchHash.indexOf('search='))
    		                  .split('&')[0]
    		                  .split('=')[1];
      
      
      $('#example').dataTable( {
        "oSearch": { "sSearch": searchString }
      } );
    } )

    【讨论】:

      【解决方案2】:

      您可以简单地 have a function that reads your URL var 然后过滤表格。我想你通过 q=Firefox 作为你的搜索

      // Read a page's GET URL variables and return them as an associative array.
      function getUrlVars()
      {
       var vars = {};
          var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
              vars[key] = value;
          });
          return vars;
      
      }
      
      $(document).ready(function() {
          // Get the query from the url
          var query = getUrlVars()['q'];
          // create the table
          var oTable = $('#example').dataTable();
          // Filter it
          oTable.fnFilter( query, 2 );
      });
      

      在这里提琴http://fiddle.jshell.net/9CxYT/17/show/?q=Firefox

      【讨论】:

      • 这听起来像是正确的解决方案......但我无法让它工作。这是我如何尝试集成您的代码的一个 jsfiddle ......也许我没有正确处理它?它隐藏所有条目。 jsfiddle.net/lbriquet/9CxYT/14
      • jsfiddle 设计框架可以看作是一个独立的页面(不在 iframe 中)。为此,请右键单击设计框架并选择“此框架”,然后选择“在新选项卡中打开框架”。这会将页面加载为:fiddle.jshell.net/lbriquet/9CxYT/14/show 我尝试将“q”值添加到 url,但它没有将我的值添加到搜索过滤器或显示具有该值的行。 fiddle.jshell.net/lbriquet/9CxYT/14/show/?q=firefox你能帮我理解我做错了什么吗?
      • @lbriquet 不知道 jsfiddle 的那个特性。无论如何,getUrlVars 函数很糟糕,现在它可以工作了。我更新了我的答案
      • 在 url 中传递值效果很好!!无论如何,传递的值是否可以作为搜索字段中的值可见?想法是单击重置按钮将重置表格以显示所有行。基本上我希望 url 将值传递给搜索字段,以便它根据值过滤表。然后重置按钮将从搜索字段中删除值并显示完整的未过滤表。
      【解决方案3】:

      这是我为使其正常工作所做的:

      @Ibriquet 的第一部分从 url 获取 GET 参数,我没有更改它。很可能有更好的方法来做到这一点,但我没有研究过。

      // Read a page's GET URL variables and return them as an associative array.
      function getUrlVars()
      {
       var vars = {};
          var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
              vars[key] = value;
          });
          return vars;
      
      }
      

      对于第二部分,我将其包含在 $('#tablename').DataTable( { here, right after the column setup }

            initComplete: function() {
              this.api().search(getUrlVars()['search']).draw();        
            },
      

      这会将 ?search= 之后和任何 & 之前的任何内容放入搜索字段中。

      【讨论】:

      • 它有效,但我必须在 this.api().search(getUrlVars()['搜索']).draw();否则它会在控制台中生成警告。
      • 我还必须添加 decodeURI:this.api().search(decodeURI(getUrlVars()['search'])).draw();解码 URL 中的百分比编码字符串。
      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 2018-07-05
      • 2022-06-10
      • 2020-01-25
      • 2015-04-03
      • 2016-08-13
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多