由於ID衝突,我的應用程序出現問題。該應用程序基本上使用AJAX加載用戶需求的代碼片段。這些片段非常不同,但有時,代碼片段使用與HTML標記中的另一個ID相同的ID。HTML中單獨的「名稱空間」
想象用戶請求片斷1和獲取此:
....
<input id="myvar" type="checkbox" name="myname" />
....
該片段是通過JQuery.load()添加到主頁代碼
然後,用戶請求內容片段2,並得到:
....
<div id="myvar">....</div>
....
在這一刻,有具有相同ID 2個不同的HTML標籤,所以當應用程序不會:
$("#myvar").something()
結果未定義。
所以,問題是我不知道是否可以使用任何JavaScript或HTML功能或技巧在HTML中分割代碼片段。
由於每個片段都有一個關聯的JavaScript代碼來處理它,並且需要訪問代碼段DOM,所以不能在加載時爲所有ID加上前綴。
好消息:片段完全隔離在頁面上。頁面結構是這樣的:
<html>
<head>...</head>
<body>
<div id="header">...</div>
<div id="common_controls">...</div>
<div id="snippets">
<div class="snippet" id="snippet-1">
// Snippet 1 code here
</div>
<div class="snippet" id="snippet-2">
// Snippet 2 code here
</div>
</div>
</body>
</html>
任何想法?
編輯:我無法控制片段內容,因此它不是使用特定ID名稱的選項。
所有的ID必須是唯一的;這是底線。這是應該和可以管理的東西服務器端 - 你沒有提到一個框架,但我認爲這不只是一個平面文件的HTML頁面? – Widor
正如@Widor所說,[id必須是唯一的](https://developer.mozilla.org/en/DOM/element.id#Notes)。 – Eric
是的,這是問題所在。我無法管理非唯一ID,這不是一個好習慣,但我不能強迫用戶這樣做,而且如果我這樣做,某些用戶可能會犯錯。服務器端的問題是我可以修改HTML片段,但不能修改其相應的JavaScript代碼片段,所以如果我更改了ID,此JavaScript代碼片段將無法找到它所需的DOM項目。 – Ivan