• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハイライト表示をしたい)

ハイライト表示をしたい

このQ&Aのポイント
  • ハイライト表示をしたいと思っています。最初に作った物はタグの中まで置換をしてしまい、HTMLがくずれるという問題が発生しました。
  • このサイトで質問したところ、以下のスクリプトを教えて頂きました。しかし、Firefoxでは動くのですが、IEでは動きません。
  • フレーム越しの要素コピーは、Firefoxではできて、IEではできないことが原因の可能性があります。javascript初心者ですが、解決方法を教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ご提示のスクリプトがどこにあるのか不明ですが、多分、<frameset>のあるファイルにあるのかと想像します。 なぜそこにあって、グローバル変数(str)をどのように使っているのかよくわからないけど… >フレーム越しの要素コピーは,FFではできて,IEではできないらしい ↑というようなことはないでしょう。 documentは取得できているようですし。 どうやら、IEではテキストノードに対して、replaceChildとかinsertBeforeなどの操作が効かないみたい。(removeChildはできるみたいですけど。) とりあえず思いつくのは、search内では一度テキスト(目印になる文字列)に置き換えておいて、最後にまとめてinnerHTMLで置き換えるという2段階にすれば可能ではないのでしょうか。 ↓の例では一時置き換え用に「_ + ESC + DEL + _」の文字列を使っていますが、実際に利用するhtmlに出てこない文字列にしておくのがよろしいかと… (leftはフレームのname属性と仮定しました) function left_load(a){ if(str){ var e, str_tmp = '_\x1b\x7f_'; var str_rep = '<span style="background:#77ff77;font-weight:bold">' + str + '</span>'; e = frames['left'].document.getElementsByTagName("body"); search(e, str_tmp); e[0].innerHTML = e[0].innerHTML.replace(new RegExp(str_tmp,"g"), str_rep); } } function search(elm, s) { var i, e; for (i=elm.length-1; i>=0; i--) { e = elm[i]; if(e.nodeName=="#text") { e.nodeValue = e.nodeValue.replace(new RegExp(str,"g"), s); } else { if (e.hasChildNodes()) search(e.childNodes, s); } } }

zenigame99
質問者

お礼

ありがとうございました! 出来ました~!(>< 「IEではテキストノードに対して、replaceChildとかinsertBeforeなどの操作が効かない」←これが原因なのですね・・・ ブラウザによって動いたり動かなかったりと、javascriptって難しいですね 教えて頂いたスクリプトをきちんと理解出来るように勉強します 本当にありがとうございました

関連するQ&A