我正在創建一個網頁,其中包含多個可能包含ID的HTML模板。因此,最終頁面可能包含幾個具有完全相同ID的HTML元素,但不允許HTML同一個HTML文檔中的多個相同的ID
仍然我似乎能夠使用jQuery上下文解決此問題,如:$(「#id54」,template4 ),但這會始終在所有瀏覽器中工作,或者一些瀏覽器會拒絕我多個ID嗎?
我正在創建一個網頁,其中包含多個可能包含ID的HTML模板。因此,最終頁面可能包含幾個具有完全相同ID的HTML元素,但不允許HTML同一個HTML文檔中的多個相同的ID
仍然我似乎能夠使用jQuery上下文解決此問題,如:$(「#id54」,template4 ),但這會始終在所有瀏覽器中工作,或者一些瀏覽器會拒絕我多個ID嗎?
$(selector, context)
語法將始終只在給定的上下文中進行搜索,因此只要您的ID在該上下文中是唯一的,您的jQuery就可以在所有瀏覽器中工作。
然而,當你意識到,在模板中以這種方式使用ID是不明智的。
由於不允許多個相同的ID,因此沒有規定應如何處理。永遠不能保證所有的瀏覽器都會繼續支持你正在編寫的代碼。儘管如此,該代碼在所有主流瀏覽器上的行爲方式都將如此。
變通方法將使用模板引擎中的類或邏輯來確保唯一的ID,例如, templateID-control-2-myButton。
好的 - 看來我最好轉向使用類來確保。 – 2012-03-09 16:30:42
只要您使用jQuery上下文,例如$('#some-id', context)
,它會正常工作。
但是,對於在頁面中多次出現的元素,您應該真的使用類名稱而不是ID。
爲什麼downvote? – 2012-03-09 14:24:44
爲什麼這是downvoted?我同意.. – 2012-03-09 14:25:41
沒有瀏覽器會拒絕你多個ID,但這是不好的做法。 「ID」標籤是文檔對象模型(DOM)中對象的唯一標識符。如果你打算用這些ID來使用jQuery,你需要提出另一種解決方案。 注意:您的代碼仍然可以正常工作,並且會在每個瀏覽器中呈現。如果你一直查詢它並且它們都具有相同的ID,那麼只需要更多地強調DOM。 (另外,不是很維護)
如果你需要每個模板具有相同的ID,可以考慮使用一個類(即.template
),甚至是自定義屬性(即<div class="something" mycustomid="1">
然後使用$(東西).attr('mycustomid ')來訪問它(注意:W3C的HTML驗證器不會驗證這一點)
如果你真的堅持使用ID,但想要使代碼更好,請嘗試爲id的開頭添加獨特的前綴(Even如果你的模板是以這種方式創建的,那麼迭代器的索引),然後使用jQuery做正則表達式匹配
這不是一個答案,但我沒有足夠的信息:)
從不在DOM中具有相同的ID。 – PeeHaa 2012-03-09 14:23:36
PS在選擇id時,不應該添加上下文。只選擇一個ID是非常快的。 – PeeHaa 2012-03-09 14:25:11
所以你說的是,當你選擇多個相同的ID時,jQuery返回更多的元素?它不應該和它認爲非常不好的做法。使用多個類。 – 2012-03-09 14:25:43