2014-04-16 101 views
1

下面是一些示例代碼。Javascript:訪問沒有getElementById的DOM元素

<body> 
    <div id="wrapper" class="access"> 
     <form id="test"> 
      <input id="password"></input> 
      <input type="submit"></input> 
     </form> 
    </div> 
    <script> 
     console.log(password); 
     alert(wrapper.className); 
    </script> 
</body> 

控制檯日誌返回id爲password的DOM元素。警報是「警報」。

它也以正常代碼工作,例如, var x = wrapper.className;

這肯定是不對的? document.getElementById,$('#password')goog.dom.getElement如果只是這樣工作,那麼它有什麼意義?現在這些功能只適用於遺產嗎?

順便說一下,它可以在Firefox,Chrome和Safari中運行。

+1

一些瀏覽器定義ID爲全局變量的元素。國際海事組織,使用'getElementById'。 –

+2

你可以爲此感謝IE。他們啓動了它,其他人則爲了兼容性而進行了追蹤這被認爲是不好的做法。堅持使用'document.getElementById'或者您爲其提供示例的庫中的等價物。 –

+2

[JavaScript未定義變量可能是自動定義的?](http://stackoverflow.com/questions/21340666/javascript-undefined-variables-are-auto-defined),也可以:http://stackoverflow.com/問題/ 15767961/are-ids-for-html-element-always-available-from-the-window-object和http://stackoverflow.com/questions/3434278/ie-chrome-are-dom-tree-元素全局變量 - 在這裏 –

回答

2

向後兼容性是ID映射到window屬性的原因。

這也是一個主要的原因,以避免全局變量 - 事實上,如果您嘗試使用全局變量這是相同的名稱爲元素的ID一些瀏覽器將徹底打破。