2011-05-17 101 views
0

想知道何時使用,這適用於什麼瀏覽器?何時使用if(document.all && document.getElementById)條件

if (document.all&&document.getElementById) { 
// Some code block 
} 
+2

千萬不要使用它。這是一種古老的方法來檢測其中一個IE版本,6我認爲。您想做什麼? – 2011-05-17 10:57:17

+0

我在這裏發現了這個方法http://www.alistapart.com/articles/dropdowns/要實現li:在IE 6,7上懸停,因爲他們不支持它。我認爲,如果(document.getElementById){//一些代碼}在我提到的上下文中有意義,它會更好。非常感謝Crow for Feature Deteection提示。 – nepsdotin 2011-05-19 04:38:49

回答

4

我不認爲有不支持任何document.getElementById瀏覽器顯著左右。即使IE6支持它(雖然它得到了錯誤  — details   —但它與document.all做同樣的事情)。我只是使用document.getElementById而不是document.all。如果您在使用本

只是來檢測瀏覽器,而不是專門因爲要使用document.alldocument.getElementById瀏覽器檢測通常是一個壞主意。相反,看看功能檢測,測試你想要的實際功能。特徵檢測herehere有一些很好的例子。


題外話:如果你正在尋找做任何顯著跨瀏覽器的工作,你可以考慮使用一個庫一樣jQueryPrototypeYUIClosure,或any of several others。他們會爲你平滑瀏覽器的差異,提供一些非常有用的實用功能,甚至(在某些情況下)修復瀏覽器錯誤,如IE的破壞處理document.getElementById(jQuery這樣做,例如,其他人可能也是如此)。

0

document.all是由舊版IE(IE3及更高版本)實現的功能。它也是由Opera實施的,目的是爲了與僅限IE的網站兼容。

但是不再推薦使用document.all在任何情況下使用 - 它完全過時。 IE和Opera一直支持它,因爲可能有一些舊代碼仍然使用它,但在現代代碼中沒有它的位置。

有些腳本庫在Javascript中實現了document.all版本,允許舊代碼在現代瀏覽器上運行。出於這個原因,甚至不值得使用document.all作爲瀏覽器測試(正如你在問題中所展示的那樣)。事實上,我必須做的所有事情都是寫入document.all = true;

document.getElememtById最初是由IE5.0版本實現的,所以你在問題中給出的條件應該是在IE5的日子裏寫的,而且是IE5.0的原始瀏覽器檢測代碼,更高,因爲那是(當時)唯一支持這兩種方法的瀏覽器。但正如已經討論的那樣,現在它幾乎沒有用處,並且更有可能導致你的問題而不是做任何事情。

+0

afaik IE3不支持'document.all' – Knu 2011-05-19 07:27:18

+0

@Knu - 自從我使用IE4以來,這已經很長時間了,更不用說IE3了,但我的印象是IE3在引入JScript的時候, document.all'是原始功能之一(畢竟,腳本至少需要某種類型的DOM訪問)。但我很高興在這方面出錯。無論哪種方式,這一點認爲它已經過時,不應該使用。 – Spudley 2011-05-19 08:04:33

0

這適用於什麼瀏覽器?

if (document.all)目標IE4 +,歌劇V5之間(在Linux V4)和v9.5器Konqueror 2,因爲iCab 2和3,4了OmniWeb(V4.5之前),並使用Rhino JavaScript引擎一些模糊的瀏覽器。
if (document.getElementById)目標的任何DOM1準備瀏覽器(IE5 +,NS5 +,OP4 +等)

何時如果 (的document.all & &的document.getElementById)使用 條件

我不能想象一下這種情況的合理用例(它不夠具體)。
所以顯然的答案是從來沒有