1

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

在下面的代码中,byId()函数null在 IE 中返回,但[object HTMLObjectElement]在 Firefox 3 中lengthOfByTagName()返回,函数0在 IE 中返回,但1在 Firefox 中返回。

有什么我做错了吗?

<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>
4

3 回答 3

3

这是因为 IE 对待 <object> 节点相对于 DOM 的方式。

由于无论如何您都在动态替换,我建议您改为在需要的地方创建一个 <div> 并将 innerHTML 更改为您需要的对象的 HTML。

于 2008-12-02T17:35:47.550 回答
3

我刚刚在 IE 7 上进行了测试,并看到了所描述的行为

Internet Explorer 不希望<object>标签中有自由文本。在您的示例上使用 Debugbar 证明 IE 没有构建正确的 DOM 树。

请改用此代码

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

它将按预期工作。

于 2008-12-02T17:37:32.040 回答
0

在 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);

在你的编码中试试这个。

于 2015-03-11T09:18:55.157 回答