2013-01-23 18 views
5

可能重複:
IE/Chrome: are DOM tree elements global variables here?爲什麼使用document.getElementById可以直接引用JavaScript中的DOM id?

最近我發現我可以在任何支持JavaScript的對象使用來自DOM與直接引用其ID:

<div id="layer">IM A LAYER</div> 
<script> 
    alert(layer.innerHTML); 
</script> 

如果這是真的,我會使用getElementById方法得到什麼好處?

+0

var layer =「OMG WTF」; alert(layer.innerHTML)' –

+0

「這是非常糟糕的,因爲現在你必須避免在文檔或窗口對象的任何成員(或者項目中的任何其他庫代碼)可能想要使用的任何成員之後命名元素。 「 http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-elements-global-variables-here?lq=1 –

回答

7

如果元素不存在,直接訪問DOM元素會給你一個錯誤。如果您使用getElementById,它將返回NULL

你也不能直接訪問的所有元素,如果他們,例如,有破折號在其名稱(some-id),因爲JS的變量不能包含破折號。但是,您可以通過window['some-id']訪問它們。

1

這隻適用於id包含允許變量名稱的字母。對於像text-11item-key-21這樣的ID,它將不起作用。

2

例如,如果在你的頁面,你在別處有

<script> 
var layer = false; // or any other assignment 
</script> 

layer另一個前面的腳本將是window.layer參考,然後layer.innerHTML將失敗。用document.getElementById你將避免這個棘手的錯誤

相關問題