ID 分配的DOM 元素和全域屬性
在上一個問題中,我們發現具有ID 的特定DOM 元素可以作為變數存取Internet Explorer 和Chrome 中視窗物件的名稱或屬性。例如,對於HTML 元素:
<div>
innerHTML 屬性可以如下檢索:
alert(example.innerHTML); // Alerts "some text". alert(window["example"].innerHTML); // Alerts "some text".
這提出了問題:
屬性和全域可訪問性
預期的行為是讓命名元素成為文件物件的明顯屬性。然而,這種方法是有問題的,因為它允許元素名稱與實際文件屬性發生衝突。
Microsoft Internet Explorer 透過將命名元素指定為視窗物件的屬性,加劇了這個問題。由於需要避免與文件或視窗物件的任何成員相符的元素名稱,這使得事情變得更加複雜。
全域可訪問性問題
此外,命名元素變得可見:類似全域的變數。雖然全域變數和函數宣告通常會掩蓋它們,但為具有符合名稱的全域變數賦值可能會導致 Internet Explorer 中出現錯誤。
最佳實踐
它通常不鼓勵依賴命名元素作為全局屬性或在創建全域變數時省略 var 聲明。建議遵循 document.getElementById,因為它具有更廣泛的支援並減少了歧義。如果輸入成為問題,請考慮使用名稱較短的簡單包裝函數。
快取和瀏覽器最佳化
維護 id 到元素查找快取通常是不必要的因為瀏覽器經常使用快速查找來最佳化 getElementById 呼叫。當元素更改 ID 或從文件中新增/刪除時,就會出現潛在問題。
標準化和未來影響
HTML5 規範現在將先前的非標準實踐編入法典將命名元素添加到文件和視窗屬性。這意味著 Firefox 4 也將支援此功能。
結論
雖然在某些瀏覽器中可以使用ID 作為全域屬性來存取DOM 元素,但這種做法是由於潛在的衝突和歧義而灰心喪氣。最好依賴 document.getElementById 或簡單的包裝函數。
以上是我可以透過 ID 作為全域屬性存取 DOM 元素嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!