2010-09-20 97 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