【问题标题】:Most Efficient way of Filtering an Html Table?过滤 Html 表的最有效方法?
【发布时间】:2010-12-07 05:05:05
【问题描述】:

我有一个 ajax 函数,它调用一个 servlet 从各种 web 服务中获取产品列表,产品的数量可以达到 100,000 个。我需要在 html 表格中显示此列表。

我正在尝试为用户提供一个界面,以根据多个标准过滤此列表。目前我正在使用一个简单的 jQuery 插件来实现这一点,但我发现它会占用内存和时间。 我使用的 Javascript 基本上使用正则表达式来搜索和过滤符合过滤条件的行。

我正在考虑一种替代解决方案,其中我过滤了我的 servlet 返回的 JSON 数组并将 html 表绑定到它。有没有办法实现这一点,如果有,那么它是否比正则表达式方法更有效。

【问题讨论】:

  • 你的数据集是什么样的?
  • 不是我山姆.... 至少当我不知道问题的正确解决方案时,我从不这样做
  • 抱歉,我已经修改了我的评论。

标签: javascript jquery html html-table filtering


【解决方案1】:
  1. 用户输入过滤器并点击 搜索。
  2. Ajax 调用数据库,数据库有适当的索引 列和数据库进行过滤。
  3. 数据库返回结果
  4. 在表格中显示结果。 (可能希望它被分页到 一次只显示 100-1000 行 因为一个表中的 100,000 行可以 真的让你的浏览器变慢了。

编辑:由于您没有数据库,因此您能做的最好的事情就是在 JSON 数据集上运行正则表达式并添加与表匹配的结果。您需要将 JSON 数据集保存在一个变量中,以防他们更改搜索。 (我假设现在您将所有内容添加到表中,然后使用 jquery 表插件对其进行过滤)

【讨论】:

  • 谢谢或回复,但问题是我不维护数据库,我只是聚合了一些网络服务并返回结果。
【解决方案2】:

如果你要返回 xml,你可以使用 jQuery 选择

$('.class', context) 其中 context 是您的 xml 响应。

从此选择中,您可以将 xml 写入页面并使用 CSS 设置样式。至少我一开始就是从那里开始的。我在我的一个应用程序中做类似的事情,但我的数据集更小。

【讨论】:

    【解决方案3】:

    我不知道你所说的“绑定”是什么意思?您可以解析 JSON,然后使用 for 循环(或 $.each())来填充以太直接 HTML 或使用网格插件的插入/添加

    【讨论】:

      【解决方案4】:

      我假设过滤意味着只显示数据的一个子集;而不是排序。

      当您将数据填充到表中时,为每一行添加您想要过滤的所有内容的类。例如:

      <tr class="filter1 filter2 filter3">....
      <tr class="filter1 filter3">....
      <tr class="filter2">....
      <tr class="filter3">....
      

      然后,当您想应用过滤器时,您可以执行以下操作:

      $('TR:not(.filter1)').hide();
      

      【讨论】:

      • 查看我的回复。他可以通过指定上下文对 xml 文档使用 jQuery 过滤。
      【解决方案5】:

      检查多达 100,000 件物品并检查它们是否符合您的标准需要一段时间,尤其是在标准可能很复杂的情况下(必须是带有 2 或 3 间卧室且不在邮政编码 12345 和 FIREPLACE 但不是 JACUZZI 的公寓) .

      也许您的 servlet 可以缓存 100,000 个项目的数据,可以根据用户浏览器发布的标准进行过滤。例如,它可以返回“从 100,000 个中选择的 12,456 个项目中的第 1-50 个项目”,并让用户向前翻页到接下来的 50 个左右,甚至可以选择要返回多少个项目(25 个、50 个、全部)。

      如果他们在将数字缩小到很远之前选择了“全部”,那么细心的用户会预计加载需要一段时间。

      换句话说,甚至不要尝试管理浏览器中的 100,000 个项目,让服务器来做。

      【讨论】:

        【解决方案6】:

        我同意 Berry 的观点,即浏览器中的 100000 行有点牵强,但如果有任何东西可以接近处理这种量级的东西,那就是 jOrder。 http://github.com/danstocker/jorder

        根据您的 JSON 创建一个 jOrder 表,并添加最必要的索引。我的意思是那些你必须不惜一切代价过滤的东西。

        例如您有一个包含人名的“姓名”字段。

        var table = jOrder(json)
            .index('name', ['Name'], { sorted: true, ordered: true });
        

        然后,例如,这就是您选择名称字段以“John”开头的记录的方式:

        var filtered = table.where([{ Name: 'John' }], { mode: jOrder.startof, renumber: true });
        

        稍后,如果您需要在表中分页,只需向表构建器提供 filtered.slice(...)

        【讨论】:

          猜你喜欢
          • 2020-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-10
          • 1970-01-01
          • 2017-05-19
          • 1970-01-01
          相关资源
          最近更新 更多