2012-03-09 70 views
3

我正在創建一個網頁,其中包含多個可能包含ID的HTML模板。因此,最終頁面可能包含幾個具有完全相同ID的HTML元素,但不允許HTML同一個HTML文檔中的多個相同的ID

仍然我似乎能夠使用jQuery上下文解決此問題,如:$(「#id54」,template4 ),但這會始終在所有瀏覽器中工作,或者一些瀏覽器會拒絕我多個ID嗎?

+15

從不在DOM中具有相同的ID。 – PeeHaa 2012-03-09 14:23:36

+0

PS在選擇id時,不應該添加上下文。只選擇一個ID是非常快的。 – PeeHaa 2012-03-09 14:25:11

+0

所以你說的是,當你選擇多個相同的ID時,jQuery返回更多的元素?它不應該和它認爲非常不好的做法。使用多個類。 – 2012-03-09 14:25:43

回答

10

$(selector, context)語法將始終只在給定的上下文中進行搜索,因此只要您的ID在該上下文中是唯一的,您的jQuery就可以在所有瀏覽器中工作。

然而,當你意識到,在模板中以這種方式使用ID是不明智的。

由於不允許多個相同的ID,因此沒有規定應如何處理。永遠不能保證所有的瀏覽器都會繼續支持你正在編寫的代碼。儘管如此,該代碼在所有主流瀏覽器上的行爲方式都將如此。

變通方法將使用模板引擎中的類或邏輯來確保唯一的ID,例如, templateID-control-2-myButton

+0

好的 - 看來我最好轉向使用類來確保。 – 2012-03-09 16:30:42

4

只要您使用jQuery上下文,例如$('#some-id', context),它會正常工作。

但是,對於在頁面中多次出現的元素,您應該真的使用類名稱而不是ID。

+0

爲什麼downvote? – 2012-03-09 14:24:44

+0

爲什麼這是downvoted?我同意.. – 2012-03-09 14:25:41

1

沒有瀏覽器會拒絕你多個ID,但這是不好的做法。 「ID」標籤是文檔對象模型(DOM)中對象的唯一標識符。如果你打算用這些ID來使用jQuery,你需要提出另一種解決方案。 注意:您的代碼仍然可以正常工作,並且會在每個瀏覽器中呈現。如果你一直查詢它並且它們都具有相同的ID,那麼只需要更多地強調DOM。 (另外,不是很維護)

如果你需要每個模板具有相同的ID,可以考慮使用一個類(即.template),甚至是自定義屬性(即<div class="something" mycustomid="1">然後使用$(東西).attr('mycustomid ')來訪問它(注意:W3C的HTML驗證器不會驗證這一點)

如果你真的堅持使用ID,但想要使代碼更好,請嘗試爲id的開頭添加獨特的前綴(Even如果你的模板是以這種方式創建的,那麼迭代器的索引),然後使用jQuery做正則表達式匹配

這不是一個答案,但我沒有足夠的信息:)

相關問題