1

getElementById を使用して Web ページからオブジェクト要素を取得しようとしています (最終的には、動的に作成されたオブジェクト要素に置き換えることができます) がnull、IE6 で返されます。

次のコードでは、byId()関数はnullIE では返されます[object HTMLObjectElement]が Firefox 3 ではlengthOfByTagName()返され、関数は0IE では返されますが1Firefox では返されます。

私が間違っていることはありますか?

<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 が DOM に対して <object> ノードを処理する方法によるものです。

とにかく動的に置き換えるので、必要な場所に <div> を作成し、innerHTML を必要なオブジェクトの HTML に変更することをお勧めします。

于 2008-12-02T17:35:47.550 に答える
3

IE 7でテストしたところ、説明どおりの動作が見られました

<object>Internet Explorer は、タグ内のフリー テキストを想定していません。サンプルで Debugbar を使用すると、IE が正しい DOM ツリーを構築していないことが証明されました。

代わりにこのコードを使用してください

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

期待どおりに動作します。

于 2008-12-02T17:37:32.040 に答える