过滤Html表的最有效方法?

时间:2009-10-15 21:42:23

标签: javascript jquery html html-table filtering

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

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

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

6 个答案:

答案 0 :(得分:1)

  1. 用户输入过滤器和点击 搜索范围。
  2. Ajax调用数据库,数据库上有适当的索引 列和数据库进行过滤。
  3. 数据库返回结果
  4. 在表格中显示结果。 (可能希望它被分页 一次只能显示100-1000行 因为表中的100,000行可以 真的让你的浏览器变慢。
  5. 编辑:由于您没有数据库,因此您可以做的最好的事情是在JSON数据集上运行正则表达式并添加与表匹配的结果。您需要将JSON数据集保存在变量中,以防它们更改搜索。 (我现在假设您正在将所有内容添加到表中,然后使用jquery表插件对其进行过滤)

答案 1 :(得分:1)

查看最多100,000件商品并检查他们是否符合您的标准需要一段时间,特别是如果标准可能很复杂(必须是带有2或3个卧室的CONDO,而不是邮政编码12345和FIREPLACE但不是JACUZZI)

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

如果他们在缩小数字之前选择“全部”,那么中途观察的用户将期待它需要一段时间才能加载。

换句话说,甚至不要尝试管理浏览器中的100,000个项目,让服务器执行此操作。

答案 2 :(得分:0)

我假设通过过滤你的意思是只显示数据的子集;而不是排序。

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

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

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

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

答案 3 :(得分:0)

我同意Berry的看法,浏览器中的100000行有点紧张,但是如果有任何接近处理这种程度的东西那么它就是jOrder。 http://github.com/danstocker/jorder

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

E.g。你有一个带有人名的“姓名”字段。

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

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

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

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

答案 4 :(得分:-1)

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

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

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

答案 5 :(得分:-1)

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