2010-09-20 99 views
0

我有一个查询,我只想知道它是否可能做。如果是的话,那么如果你能指导我一个样本或一个例子,那将是非常有用的。html元素比较

所以我想要做的是,做一个比较HTML(或DOM元素)。所以让我们来看看这个场景:

我在我的页面上有5行(5 <tr>或5 <div>的),我做了一个ajax调用来获取更多数据,这次服务器返回了8行(只有3行行是新的,5个仍旧是旧行),所以我不想再次显示所有8行,我只想追加这3个新行来存在5行。

我知道一个解决方案是在我的服务器端执行,一次发送一行,但服务器端代码或多或少被冻结,所有更改只需在客户端完成。

您的意见非常有价值。

+0

的通过缩进的段落,堆栈溢出认为你必须输入一些代码,并对其进行格式化。请编辑你的文章,删除段落缩进,文本将包装和更容易阅读! – fearoffours 2010-09-20 15:53:51

+0

每个单元格/行的内容都是唯一的吗?他们的属性怎么样,比如'id'? – 2010-09-20 15:56:36

+0

是否有可能告诉服务器你已经拥有哪些行,所以它不会向你发送重复项? – NullUserException 2010-09-20 15:56:50

回答

1

当您收到AJAX数据时,您应该尝试解析检索到的ID(或某个标识对象,如日期/时间)并将它们保存在数组中。每次获取AJAX数据时,解析ID,检查数组以查看它是否是新的,如果是,则显示它。

这样做的IDEAL方法是将最高的检索ID传递给ajax调用,并让您的服务器只返回具有比该ID更高的ID的项目。这非常类似于Facebook如何进行实时Feed。

+0

嗨Dutchie,感谢您的答复。真的很喜欢你的想法 – t0mcat 2010-09-20 16:05:06

+0

看到我对ErikB的答案评论。它进一步解释了我们的两个帖子。 – Dutchie432 2010-09-20 17:07:02

1

如果你只能在客户端处理这个,我建议在客户端存储一个数据对象(关联数组),并从中构建你的HTML。

+0

感谢Robusto的回复。 – t0mcat 2010-09-20 16:09:54

0

为什么不简单地使用JS变量来跟踪你已经存在的元素呢?我认为其他一切都太复杂,因为它需要一些复杂的比较。否则,只需删除所有行,并将它们放入全新的行中。

所以非此即彼:

  • 缓存在您的JS代码你已经显示
  • 重绘全套行
+0

嗨,Erik,有没有什么特别需要做JS代码缓存 – t0mcat 2010-09-20 16:30:18

+0

我认为erikb基本上是说我在说什么。我认为当他说“缓存你已经显示的内容”时,他指的是跟踪哪些项目已经显示,所以你可以比较传入的项目和“缓存”来确定显示的内容。在您的JS代码中,您可以跟踪A)所显示项目的ID的int数组或B)具有最高ID的单个int(当然,如果您的项目是ID顺序的话)。 – Dutchie432 2010-09-20 17:06:09

+0

是的,如何存储最有意义的信息应该由程序员决定。有时候存储整个数据对象也是有意义的,而不仅仅是一个ID。例如,在你永远不会有太多数据对象的情况下,或者当数据也使用AJAX进行大量更改时。或者如果没有ID,计算一个将被存储的散列码可能是有意义的。 ID最高的情况也非常好,因为您只需存储一个值。但在某些情况下,首先你会得到[2,4,6]然后是[2,3,4,6]。 – erikbwork 2010-09-20 23:21:40