Hatena::ブログ(Diary)

はてなダイアリー

 | 

2006-10-28

IE、setAttributeでclassは設定できない

nanto_viさんの以下記事にて、より詳しくまとめられており、回避策も示されています。

本エントリは飛ばして、こちらをご参照ください。




IEで、Element#setAttributeでclassを設定した要素にCSSが適用されなかった。


以下コードで1〜3の3つのSPAN要素を作った。

3のみCSSが効かず、背景が赤くならなかった。

<style type="text/css">
.target {
  background-color:red;
}
</style>

<body>
  <span class='target'>1</span>
</body>

<script>
  var span = document.body.appendChild(document.createElement('span'));
  span.innerHTML='2';
  span.className='target';

  var span = document.body.appendChild(document.createElement('span'));
  span.innerHTML='3';
  span.setAttribute('class', 'target');
</script>

このときinnerHTMLを見ると以下のようになった。

setAttributeで設定したものだけ内部的に結果が異なっているように見える。

<SPAN class=target>1</SPAN>
<SPAN class=target>2</SPAN>
<SPAN class="target">3</SPAN>

Internet Explorer 7.0.5730.11にて確認した。

FirefoxおよびOperaでは正常に動作した。

nanto_vinanto_vi 2006/10/28 22:24 どうもIEはDOMオブジェクトのプロパティと属性をごっちゃにしている感じですね。手前味噌ですが以下が参考になるでしょうか。
IE の getAttribute / setAttribute
http://nanto.asablo.jp/blog/2005/10/29/123294
ちなみに span.className=’target’; span.setAttribute(’class’, ’target’); とすると <SPAN class=target class=”target”> となります。
(IE 6 で確認。本文中で要素名が小文字なのは IE 7 だから?)

brazilbrazil 2006/10/29 04:47 えっ!、class属性が2重になるんですか!
二つは全く別物なんですね。おかしいなぁ、IE。

再度、試してみたら要素名、全部大文字でした。

コメント、ありがとうございます。
うーんnanto_viさんのブログは、ずっと拝読しているのに、見逃していたなんて悔しいわぁ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/brazil/20061028/1161988425
 |