2010-01-19 45 views
3

document.getElementsByTagName("*")適用於IE/Firefox/Opera,但不適用於Chrome和Safari。document.getElementsByTagName(「*」)或document.all

document.all適用於IE/Chrom/Safari,但不適用於Firefox。

我該如何處理?

+3

你究竟在做什麼?有可能有更好的方法來解決真正的問題,而不使用任何一個。 – Nickolay 2010-01-20 00:06:05

回答

0

我承認今天可能有些技術我不知道,這種技術可以用跨瀏覽器的格式完成,但我過去總是這樣做的方式是請檢查您正在使用的瀏覽器。

但是,一個更簡單的解決方案是嘗試運行其中的一個,如果您得到nothing/null /錯誤,請使用另一個。無論如何,如果你真的不想自己處理它,你應該使用一個庫來處理它(例如,jQuery)。

5

嘗試這樣的:

if (document.all !== undefined) 
{ 
    allElements = document.all; 
} 
else 
{ 
    allElements = document.getElementsByTagName("*"); 
} 

或較短的版本

allElements = document.all ? document.all : document.getElementsByTagName("*"); 
+0

謝謝,但仍然不適用於Chrom和Safari – Jason 2010-01-20 08:59:53

+0

我剛剛檢查過,它適用於Chrome,我敢打賭它也適用於Safari。 – kjagiello 2010-01-20 12:12:19

+0

解決它,而不使用任何這些 – Jason 2010-01-26 08:54:17

3

document.getElementsByTagName()完美的作品在所有現代瀏覽器(IE5比一切更新)。

如果它在Chrome或Safari中似乎不起作用,那麼它很可能只是您在其他地方出現錯誤的症狀。

0

雖然我不會鼓勵你去做一個document.all,因爲它意味着你正在做很多客戶端解析,這只是不需要我知道有很多遺留的東西在那裏等我想在document.all的包裝器方法上發表我的想法的一點點延伸。

document.all = document.all || function(){ 
    return document.getElementsByTagName("*"); 
}; 

當然,這裏假設你有一個getElementsByTagName函數,應該是這種情況。

+0

請注意,在Chrome上,「document.all」的計算結果爲false。你需要做一些像'document.all!== undefined',或者一個簡短的版本,'all'in document'來檢查它的存在。 – 2013-05-16 14:55:44

-1

document.all應該避免,因爲它不符合標準。相反,您可以將document.getElementById()用於特定節點,或者使用 $("*")用於使用jQuery選擇所有元素。

但仍然如果您想使用document.all然後看它<!DOCTYPE>標記已從您的頁面中刪除,並且xmlns屬性也從您的<html>標記中刪除。

改變任何事情是這樣的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

到:

<html> 

我已經測試了火狐19.0.2和document.all工作正常,我。

原因:當您使用<!DOCTYPE>標籤,你是在告訴你的網頁是投訴它告訴你不要在你的腳本中使用document.all標準的瀏覽器,因此瀏覽器也不允許這樣做。

但是,正如你想使用它,你顯然不遵循標準,所以甚至不打擾添加<!DOCTYPE>標籤,否則document.all將無法​​正常工作。

+2

你是認真的嗎?如何使用'document.getElementById()'來選擇所有元素,爲什麼你認爲刪除doctype是一個好主意? – BoltClock 2013-03-16 13:25:55

0

沒有足夠的代表評論@Khurram Hassan的回答,我會把它放在這裏,以及我對原始問題的回答。

首先是原始問題。我的解決方案是(並且在我自己的代碼中,等待我在本網站上發佈的一個問題的答案)document.getElementsByTagName(「*」),它實際上獲取了Chrome上的每個元素。我在谷歌瀏覽器上的google.com上測試了它,並加載了一個配置文件,並列出了八個最常見的訪問網站,並提供了356個帶有標籤名稱的單個元素。公平地說,這包括HTML,頭部,身體和其他可能沒用的東西,但它仍然有它們。目前我無法訪問Opera,但Chrome仍然接受這段JavaScript代碼,但我沒有看到它不接受代碼中的原因。

二,對於@Khurram hassan,document.getElementById()不能在這種情況下使用。我只是在Chrome上進行了測試,結果它的值爲null。從理論上講,任何一般形式的getElementsBy*而不是getElementBy*都可能用於這種情況。因此,要添加到我之前的回答中,您可能還會嘗試ClassName,NameTagNameNS,具體取決於您要做什麼。在與之前相同的頁面上,我測試了這三個,雖然只有TagNameNS工作,其餘的只是返回空列表,而不是錯誤。

此外,如果在代碼中確實不需要<!DOCTYPE html>,也許可以將工作代碼作爲編輯發佈到您的答案中,以便我們可以看到它。據我所知,<!DOCTYPE html>似乎是開始HTML頁面的普遍接受(通常被認爲是強制性的)方式。如果沒有必要,那麼這將是新的信息(至少對我而言),可以在調試或非公開的網頁中證明有用。

相關問題