document.getElementsByTagName("*")
適用於IE/Firefox/Opera,但不適用於Chrome和Safari。document.getElementsByTagName(「*」)或document.all
document.all
適用於IE/Chrom/Safari,但不適用於Firefox。
我該如何處理?
document.getElementsByTagName("*")
適用於IE/Firefox/Opera,但不適用於Chrome和Safari。document.getElementsByTagName(「*」)或document.all
document.all
適用於IE/Chrom/Safari,但不適用於Firefox。
我該如何處理?
我承認今天可能有些技術我不知道,這種技術可以用跨瀏覽器的格式完成,但我過去總是這樣做的方式是請檢查您正在使用的瀏覽器。
但是,一個更簡單的解決方案是嘗試運行其中的一個,如果您得到nothing/null /錯誤,請使用另一個。無論如何,如果你真的不想自己處理它,你應該使用一個庫來處理它(例如,jQuery)。
嘗試這樣的:
if (document.all !== undefined)
{
allElements = document.all;
}
else
{
allElements = document.getElementsByTagName("*");
}
或較短的版本
allElements = document.all ? document.all : document.getElementsByTagName("*");
document.getElementsByTagName()
完美的作品在所有現代瀏覽器(IE5比一切更新)。
如果它在Chrome或Safari中似乎不起作用,那麼它很可能只是您在其他地方出現錯誤的症狀。
雖然我不會鼓勵你去做一個document.all,因爲它意味着你正在做很多客戶端解析,這只是不需要我知道有很多遺留的東西在那裏等我想在document.all的包裝器方法上發表我的想法的一點點延伸。
document.all = document.all || function(){
return document.getElementsByTagName("*");
};
當然,這裏假設你有一個getElementsByTagName函數,應該是這種情況。
請注意,在Chrome上,「document.all」的計算結果爲false。你需要做一些像'document.all!== undefined',或者一個簡短的版本,'all'in document'來檢查它的存在。 – 2013-05-16 14:55:44
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
將無法正常工作。
你是認真的嗎?如何使用'document.getElementById()'來選擇所有元素,爲什麼你認爲刪除doctype是一個好主意? – BoltClock 2013-03-16 13:25:55
沒有足夠的代表評論@Khurram Hassan的回答,我會把它放在這裏,以及我對原始問題的回答。
首先是原始問題。我的解決方案是(並且在我自己的代碼中,等待我在本網站上發佈的一個問題的答案)document.getElementsByTagName(「*」),它實際上獲取了Chrome上的每個元素。我在谷歌瀏覽器上的google.com上測試了它,並加載了一個配置文件,並列出了八個最常見的訪問網站,並提供了356個帶有標籤名稱的單個元素。公平地說,這包括HTML,頭部,身體和其他可能沒用的東西,但它仍然有它們。目前我無法訪問Opera,但Chrome仍然接受這段JavaScript代碼,但我沒有看到它不接受代碼中的原因。
二,對於@Khurram hassan,document.getElementById()
不能在這種情況下使用。我只是在Chrome上進行了測試,結果它的值爲null。從理論上講,任何一般形式的getElementsBy*
而不是getElementBy*
都可能用於這種情況。因此,要添加到我之前的回答中,您可能還會嘗試ClassName
,Name
和TagNameNS
,具體取決於您要做什麼。在與之前相同的頁面上,我測試了這三個,雖然只有TagNameNS
工作,其餘的只是返回空列表,而不是錯誤。
此外,如果在代碼中確實不需要<!DOCTYPE html>
,也許可以將工作代碼作爲編輯發佈到您的答案中,以便我們可以看到它。據我所知,<!DOCTYPE html>
似乎是開始HTML頁面的普遍接受(通常被認爲是強制性的)方式。如果沒有必要,那麼這將是新的信息(至少對我而言),可以在調試或非公開的網頁中證明有用。
你究竟在做什麼?有可能有更好的方法來解決真正的問題,而不使用任何一個。 – Nickolay 2010-01-20 00:06:05