document.writeを正しく使うには?

[上に] [前に] [次に]
おがまん [E-Mail] [HomePage] 1999/10/29(金) 09:48:10
こんにちは、質問お願いします。
ツリー表示がしたくて、次のようなスクリプトを作りました。<head><title></title>
<script language="JavaScript"><!--
  function kansuu(hensuu){
    if(document.all){
      if(document.all(hensuu).style.display=="block")
        document.all(hensuu).style.display="none";
      else
      document.all(hensuu).style.display="block";
  }
}
//--></script></head>
で、表示の部分は、
<body>
<a href="JavaScript:kansuu('what');">自己紹介</a><br>
<span style="display:none" id="what">
<table border=0 bgcolor="#eeccff" width=200><tr><td>
このページの作者の自己紹介です。
</td></tr></table></span><br>

メールはこちら

</body>

としました。動かしてみるとIEなら上手く動いてくれました。
次に、<body>〜</body>の部分を、document.writeを使って
書きたいと思い、次のようにしました。
<body>
<script language="JavaScript"><!--
document.write("<a href='JavaScript:kansuu('what');'>自己紹介</a><br><span style='display:none' id='what'><table border=0 bgcolor='#eeccff' width=200><tr><td>このページの作者の自己紹介です。</td></tr></table></span><br>");
//--></script>
メールはこちら

</body>

すると、作った関数が動かなくなってしまいました。
恐らく、document.writeの使い方が間違っているのだと思いますが、
どう間違っているのかは、一向にわかりません。
もし、間違いがわかる方がおられましたら、教えてください。
よろしくお願いします。

Mugi [E-Mail] [HomePage] 1999/10/29(金) 10:02:46
writeの中の <a href='JavaScript:kansuu('what');'>自己紹介</a>
を <a href=\"JavaScript:kansuu('what');\">自己紹介</a>
にすればいいでしょう。
なぜなのかはわかりますよね。

おがまん 1999/10/29(金) 11:08:03
[[解決]]
Mugiさん、早い回答ありがとうございました。
ちゃんと動いてくれました。
もとの文だとクォーテーションでくくってる部分がおかしいんですよね?
<a href='JavaScript:kansuu(\"what\");'>でも動いたので、
これでもいいんですよね?
うーむ、もっと勉強しなければ……

Mugi [E-Mail] [HomePage] 1999/10/29(金) 11:29:34
解決になってますが...
ここの下の方の「エスケープ文字(\記号)」をみるといいと思います。
http://www.shiojiri.ne.jp/~openspc/JavaScript/value.html

おがまん 1999/10/29(金) 12:57:14
エスケープ文字、参考にさせていただきました。
'はエスケープ文字にしなくてもいいみたいですね。
どうも、情報ありがとうございました。

Mugi [E-Mail] [HomePage] 1999/10/29(金) 18:32:46
ちょっとくどくなりますが、再度書き込み。
最初の
write("<a href='JavaScript:kansuu('what');'>自己紹介</a>
では
<a href='JavaScript:kansuu('what');'> が書き出され、
href属性の内容は '' で囲まれているとされ、ブラウザは
JavaScript:kansuu( と解釈します。
当然これは実行時にエラーがでます。)がないのですから。
そこで、
<a href="JavaScript:kansuu('what');"> または
<a href='JavaScript:kansuu("what");'> をwriteで書き出すことにします。
そうすると、write("") の中で "" が出ることになり、エラーになります。
それを回避するのがエスケープ文字です。
だから、もし write('')でさっきのタグを書き出すなら、
write('') の中で ''を使うことになるので \' とします。
つまり、こうなります。
document.write('<a href="JavaScript:kansuu(\'what\');">自己紹介</a><br><span style="display:none" id="what"><table border=0 bgcolor="#eeccff" width=200><tr><td>このページの作者の自己紹介です。</td></tr></table></span><br>');

変更点は 'what' を \'what\' にした一個所だけですから、この方が楽ですね。

おがまん 1999/10/30(土) 09:50:45
詳しい解説どうもありがとうございます。
ようやくはっきりと理解できました。

[上に] [前に] [次に]