- ベストアンサー
.innerHTMLの不一致?
- Javascript初心者の質問です。上記のJavascriptコードで、特定の<a>要素にclassを適用するために<span>AAA</span>を比較しようとしていますが、<span>AAA</span>とAAAは一致しないためうまくいきません。解決策を教えてください。
- 上記のJavascriptコードで、<a>要素にclassを適用しようとしていますが、<span>AAA</span>とAAAは一致しないためうまくいきません。ブラウザごとに違う解決策が必要です。解決策を教えてください。
- Javascript初心者の質問です。上記のJavascriptコードで、<span>AAA</span>とAAAは一致しないため、特定の<a>要素にclassを適用できません。異なるブラウザでの解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでチェックしてみてはいかがですか? <style> .ddd{ background-Color:red; } </style> <div id="test"> <ul> <li><a href="a.html"><span>AAA</span></a></li> <li><a href="b.html" class="ddd"><span>BBB</span></a></li> <li><a href="c.html"><span>CCC</span></a></li> </ul> </div> <script type="text/javascript"> window.onload=function(){ var data = "AAA";// AAAは自動取得させる予定 var test = document.getElementById('test'); var nodes=test.getElementsByTagName("a"); for (i = 0; i < nodes.length; i++) { var cnodes=nodes[i].childNodes; for (j = 0; j < cnodes.length; j++) { if(cnodes[j].nodeName=="SPAN"){ if(cnodes[j].innerHTML == data){ // nodes[i].setAttribute("className","ddd"); nodes[i].className="ddd"; break; } } } } } </script> コメントアウト部分・・・ なんか試してみるとIEはclassをsetAttributeで指定するとき setAttribute("className","ddd"); としないといけないみたいですね。 firefoxだとsetAttribute("className","ddd")はきかず setAttribute("class","ddd"); のみしか反応しません。 なので nodes[i].className="ddd"; とするのが妥協案でしょうか? またIEはgetElementById()に直で.getElementsByTagName() をつなげられないようなので一度testオブジェクトをつくってから nodesオブジェクトを作成したほうがよいようです。
お礼
お忙しい中、早速のご回答ありがとうございました。 Javascriptも説明も、『なるほど!!』という感想しかありません。 非常に参考になりました。 ご記入いただいたJavascriptを早速試したところ、見事上手くいきました。 当方WindowsXP環境下で、 IE6/IE7/FF2/NN7/Opera9/Safari3、すべてOKでした。 これで作業を進めることができます。 本当にありがとうございました。