2012-03-16 97 views
10

考慮下面的代碼:HTML元素的ID作爲JavaScript變量

<html> 
<head></head> 
<body> 
<div id='test' class='blah'> 
    <a href='http://somesite.com/' id='someLink'>click!</a> 
</div> 
</body> 
</html> 

所以我剛剛發現,這將創建一個JavaScript對象調用someLink,我可以例如獲得href屬性的值與someLink.href。我在最新的Chrome,FF和IE中測試了它,並且它工作正常。

首先,這個「功能」到底有多長?我想可能有一段時間了,因爲我已經知道多年以來,頁面上html元素的ID必須是唯一的,並且如果確實有多個元素共享相同的ID,則最後一個元素覆蓋前一個元素,並且例如使用getElementById()將返回最後一個。但我從來沒有真正理解爲什麼,但現在,把它看作是「這是創造一個對象」的視角,這是有道理的。所以,只要能夠使用id-name-as-javascript對象直接訪問它......多久了? IE6時代?早些時候?

第二......我想這更像是一個討論的問題,而不是問題,但...... IMO似乎並不是一個非常好的「特徵」......是不是有點一個DOM和包裝函數,如getElementById(),給一些組織,更重要的是,減少命名空間問題?我不覺得我應該不必擔心頁面上的隨機html元素覆蓋我的javascript變量(最近發生的一些事情,這就是爲什麼我發現這個「功能」)。有沒有人知道爲什麼這是現實,它背後的邏輯是什麼?

+0

「我已經知道多年以來,頁面上html元素的ID必須是唯一的,並且如果確實有多個元素共享相同的ID,則最後一個元素覆蓋前一個元素,並且使用例如getElementById()將返回最後一個「據我所知,'getElementById()'將返回**第一個**,而不是最後一個具有給定ID的元素;儘管它絕對不一致(或者至少不應該依賴於一致性)。 – 2012-03-16 15:44:47

+6

你用第二點擊打頭部。它不是一個很好的特性,這就是爲什麼它永遠被棄用,如果你使用''use strict''指令,它將不會工作。 – zzzzBov 2012-03-16 15:45:14

回答

9

首先,這個「功能」有多久了?

如果我沒有記錯的話,這是一個圍繞IE 4出現的Microsoft-ISM。

其他一些瀏覽器已經增加了對它的支持,以便與依賴它的糟糕代碼兼容。有些人可能只支持quirks mode

這似乎不是一個很好的 「功能」 有

正確的。不要使用它。 :)

3

是的,它已經存在很長時間了,這可能是它存在的唯一原因。刪除這樣的「功能」將會破壞與現有網站的兼容性,而這些網站是非常不願意做的。

你說這不是一個好主意是正確的。這是一個非常糟糕的主意,可能會導致命名衝突以及全球命名空間的不必要的污染。

+0

我認爲''使用嚴格''模式中刪除了「功能」。 – 2012-03-16 15:47:24

+1

@Rocket:'「use strict」'是一個ECMAScript特性,不會影響DOM行爲。 – 2012-03-16 15:49:10