我正在尝试使用 getElementById 从我的网页获取对象元素(最终这样我可以用动态创建的对象元素替换它),但它正在返回 null 在IE6中。

在下面的代码中, byId() 函数返回 null 在 IE 中但是 [object HTMLObjectElement] 在 Firefox 3 和 lengthOfByTagName() 函数返回 0 在 IE 中但是 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>
有帮助吗?

解决方案

这是由于的方式对待IE的节点可见,以对比的DOM。

既然你动态更换反正我建议你,而不是创造一个在你需要它,改变innerHTML来为您所需要的对象中的HTML

其他提示

我刚测试了IE 7和如所描述的观察到的行为

Internet Explorer不指望在<object>标签自由文本。使用Debugbar你样品prooved IE浏览器没有建立正确的DOM树。

使用此代码,而不是

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

如预期它将工作。

在IE6中,它可能不起作用。供参考: https://msdn.microsoft.com/en-us/library/ie/ms536437%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396杂志

建议使用 jQuery 处理大部分情况

jQuery

var video = $("#VideoPlayer");

alert(video);

在你的编码中尝试一下这个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top