2013-01-25 47 views
0

我知道幾乎DOM中的任何項目都可以擁有「id」屬性,並且我一直使用它來跟蹤客戶端表中的每個客戶端。我也知道,你不應該重複任何身份證。在我的代碼中,行的id設置爲每個人的「clientId」,它來自數據庫中的唯一鍵,因此不會有重複...但頁面上的其他位置是「問題」表,其中我一直在設置每行的id爲「issueId」(同樣是一個唯一的鍵),但我意識到clientId可能會匹配一個問題,我不知道結果。我可以使用什麼來代替id屬性,以防萬一有重複?

我正在尋找一種方法來識別每一行,以便我可以稍後調用它們。是否有另一個屬性,我可以使用這將是首選嗎?我應該在分配ID時在數字前添加「客戶端」這個詞嗎?我想使用標準的做法,並在這裏有一個快速的網絡應用程序。

如果一個客戶和一個問題編號匹配是可以的,因爲我會一直知道我在找哪一個,我可以在找到它時先查看錶格。我只是不想使用「身份證」,因爲它的非法使身份證重複。例如,如果我正在尋找一個問題,我可以使用類似的東西。 document.getElementById("issueTable").getElementBySOMETHING(issueId)而不僅僅是document.getElementBySOMETHING(issueId)

+3

爲什麼不前綴 「客戶-X」 或 「問題-X」 的ID? –

+0

使用前綴... –

+0

@JanDvorak,實際上[ID可以以HTML5中的數字開頭](http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-屬性) – zzzzBov

回答

1

爲了確保沒有衝突,你可以一個唯一的前綴添加到您的ID值,例如,client-Xissue-X
現在,即使它們共享相同的密鑰,由於此前綴,每個屬性的ID屬性也不相同。然後,您可以修改您查找代碼如下

document.getElementById('issue-'+key); // get by issue 
document.getElementById('client-'+key); // get by client 

這意味着你可以在一個查詢得到你的元素,並使用getElementById這是the fastest methods之一。此外,這種方法意味着如果您希望使用CSS規則以不同方式對元素進行樣式設置,則上一代瀏覽器不會遇到以數字開頭的鍵。

+0

+1爲最佳可用選項。可以將它切成i-X和c-X。 – Dom

+0

@ DominicB-c yep,但永遠不要忘記在生產中有明確的代碼的好處! –

+0

那麼最簡單的方法是什麼時候將數字ID撤回,以防我需要將數字本身發送到數據庫? – VoltzRoad

3

使用class而不是id

getElementsByClassName(); // needs a shim for IE8 and lower 
+0

所以你建議在發生碰撞的情況下進行混淆?請閱讀該問題。 –

+1

@JanDvorak,沒有這個系統是正確的,沒有足夠的細節,給所有'issue'項目授予一個類,給所有'client'項賦予一個類,並且使用一些'data- *'屬性來傳遞必要的數據到DOM。 – zzzzBov

+0

@zzzzBov然後我會保留這個答案非我投票。 –

0

getElementById() - 通過ID返回元素的引用。

getElementsByClassName() - 返回一組具有所有給定類名稱的元素。在文檔對象上調用時,將搜索包括根節點在內的完整文檔。你也可以在任何元素上調用getElementsByClassName;它將僅返回具有給定類名稱的指定根元素的後代的元素。

getElementsByTagName() - 返回具有給定標籤名稱的元素列表。搜索指定元素下的子樹,排除元素本身。返回的列表是實時的,這意味着它會自動使用DOM樹進行自我更新。因此,不需要使用相同的元素和參數多次調用element.getElementsByTagName。

querySelectorAll() - 返回與指定的選擇器組相匹配的文檔中的元素列表(使用深度優先遍歷文檔節點)。返回的對象是一個NodeList。

字體:

http://www.quirksmode.org/dom/w3c_core.html#gettingelements

https://developer.mozilla.org/en-US/docs/DOM/

相關問題