具体的には、
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/
cabs/flash/swflash.cab#version=5,0,0,0" width="225" height="240" id="hoge" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="hoge.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
</object>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/
cabs/flash/swflash.cab#version=5,0,0,0" width="225" height="240" id="hoge" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="hoge.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
</object>
こんな感じのHTMLがあったとして、
それをJavascriptで
var obj = document.getElementsByTagName('object');
alert(obj.item(0).getElementsByTagName('param').length);
みたいな感じでparamタグを取得しようとすると、
予想していた値は『4』なのに
なぜか、2つのobjectタグ内のすべてのparamタグ要素分の
『8』が返ってくるのです。
もちろん、objectタグではなくこれが
divタグとかで同じようにlengthを求めると期待通り
『4』がかえってきます。 う~ん謎。
ちょっと調べてみたのですが、
解決策になりそうな記事がなく、やっと見つけたのが
Object getElementsByTagName IE7 Bug
でした。
バグかよ。
なので、getElementsByTagNameの使用は避けて
childNodesでobjectタグ内のノードを
一個ずつ取得していくように変更しています。
コメント(0)