1

我試圖從我的網頁使用getElementById(最終讓我可以用動態創建的對象元素替換它)獲取對象元素,但它在IE6中返回nullIE6找不到具有getElementById()的Object元素?

在下面的代碼,所述byId()函數返回IE null但在Firefox 3的[object HTMLObjectElement]lengthOfByTagName()函數返回IE 0但在Firefox 1

有什麼我做錯了嗎?

<html> 
<head> 
<title>IE doesn't see Object element?</title> 
<script type="text/javascript"> 
function byId() 
{ 
    var video = document.getElementById("VideoPlayer"); 
    alert(video); 

} 
function lengthOfByTagName() 
{ 
    var length = document.getElementsByTagName("object").length; 
    alert(length); 

} 
</script> 

</head> 
<body> 
    <object type="" id="VideoPlayer"> 
     <param name="allowScriptAcess" value="always" /> 
     <param name="allowfullscreen" value="true" /> 
     VideoPlayer element 
    </object> 
    <br> 
    <br> 
    <a href="#" onclick="javascript:byId()">getElementById("VideoPlayer")</a> 
    <br> 
    <a href="#" onclick="javascript:lengthOfByTagName()">getElementsByTagName("object").length</a> 
</body> 
</html> 

回答

3

這是因爲IE對待<對象>節點可見,以對比的DOM的方式。

由於您正在動態替換,我建議您改爲在您需要的位置創建<div>,並將innerHTML更改爲所需對象的HTML。

+0

謝謝!有時我忘記了以不同的方式進行備份和接近可能是最好的選擇。 – Albert 2008-12-02 18:48:20

3

我剛剛測試了IE 7和看到的行爲描述

Internet Explorer不指望在<object>標籤自由文本。在你的樣例上使用Debugbar,IE不會構建正確的DOM樹。

使用此代碼,而不是

<object type="" id="VideoPlayer"> 
    <param name="allowScriptAcess" value="always" /> 
    <param name="allowfullscreen" value="true" /> 
</object> 

它將按預期工作。

+0

謝謝你的回覆。刪除自由文本的確解決了這個問題,但是我認爲如果瀏覽器不知道如何顯示對象元素,那麼提供回退內容是正確的方法。例如,如果用戶沒有安裝Flash。 – Albert 2008-12-02 17:43:11