2009-07-08 87 views
3

今天我偶然發現了在Javascript中訪問DOM元素的可能性。像這樣:通過ID直接訪問DOM元素有什麼缺點?

elementid.style.backgroundColor = "blue" 

我測試了一個非常短的代碼片段,如果這在IE,Firefox和Chrome中有效 - 它確實如此。 這裏是我使用的代碼片段:

<html><head> 
<script> 
    function highlight() { 
     content.style.backgroundColor = "blue"; 
     content.style.color = "white"; 
    } 
</script> 
</head> 
<body> 
    <div id="content">test content</div> 
    <div onclick="highlight()">highlight content</div> 
</body></html> 

所以我想知道在這種情況下document.getElementById('elementid')應使用(或類似的框架替換像$()),什麼是直接接入的缺點。

我無法找到任何有用的文件。在任何地方使用getElementById或框架方法。

+0

這並不工作在Firefox(2)。 – 2009-07-08 13:20:53

回答

7

這是合適的微軟gubbins。它不適用於大量瀏覽器—,特別是在標準模式下(並且您希望標準模式可以避免quirks mode不一致,例如IE變得width錯誤)。

4

你也應該關心名字空間。現在你把它當作全局名稱空間中的一個變量來對待,你不得不相信你和你包含的任何庫都聲明瞭與DOM id相同的全局變量。高亮功能也是一樣。

此外,雖然ID與破折號是完全有效的,那些將無法通過此方法訪問。

例如<div id="container-wrapper"><div id="container"> ... </div></div>

會變成container-wrapper.style.color,然後它會嘗試從容器中減去wrapper.style.color。

2

它不是任何標準的一部分。此外,簡單的變量可以被覆蓋。 Var content可以在腳本或外部庫的任何地方重新聲明(並且,是的,我知道全局變量是邪惡的,但是ppl仍然在使用它們......),並且腳本將會中斷。

而且,當然,你不能使用ID,如alertdocument