質問

ここに私のコードがあります:

<a href="#">
    <img src="myimage.jpg" 
     onmouseover="showDescription(
          'Text', 'Text with HTML tags in them<br />More text');" 
     onmouseout="revertDescription();" 
     alt="Image description">

W3C Markup Validatorはこれを好まない。 JavaScriptコード内にHTMLタグは必要ありません。これを試みると生成されるエラーメッセージを次に示します。

  

文字<!> quot; <!> lt; <!> quot;は区切り文字の最初の文字ですが、データとして発生しました

HTMLタグを含む文字列をdocument.getElementById('myElement').innerHTMLに渡すと、ページが混乱しないようにしながら、これを修正するにはどうすればよいですか?

役に立ちましたか?

解決

onmouseover="showDescription('Text', 'Text with HTML tags in them<br />More text');" 

すべての属性値と同様に、&<、および属性区切り文字(ここでは")をHTMLエンコードする必要があります。属性値内のJavaScriptであるという事実に違いはありません。 JavaScriptがHTML属性値を見る前にHTML属性値がデコードされます。

onmouseover="showDescription('Text', 'Text with HTML tags in them&lt;br />More text');" 

これは、コンテンツが<script>であり、HTML4でCDATAエスケープされていない<![CDATA[要素とは対照的です。 XHTMLにはCDATA要素はありません。 <=>セクションを追加してXHTMLを同じように動作させることができますが、通常は、スクリプト要素とイベントハンドラー属性の両方が<=>または<=>文字を使用しないことで問題を回避する方が簡単です。文字列リテラルでは、これを回避するために使用できる別のエスケープが利用可能です:

onmouseover="showDescription('Text', 'Text with HTML tags in them\x3Cbr />More text');" 

他のヒント

そこに到達する方法はたくさんあります。

  1. &#60;
    の代わりに&lt;または<を使用します &#62;
  2. の代わりに&gt;または>を使用します
  3. <!> quot; image1 <!> quot;などの画像のIDを取得してから、 document.getElementById("image1").onmouseover = showDescription(
    'Text', 'Text with HTML tags in them<br />More text');

これがうまくいくことを願っています。

<%3Cで、>%3Eで置き換え、コンテンツの出力時にunescapeを使用します。

これは検証しません:

function(){
return ('<b> bold </b>');
}

これにより同じ結果が得られ、検証されます。

function(){
return unescape('%3Cb%3E bold %3C/b%3E'); 
}

これを<!> lt; script ... <!> gt;に入れてみてください。ブロック:

var myText = 'Text with HTML tags in them<br />More text';

HTMLの後半:

<a href="#">
    <img src="myimage.jpg" 
     onmouseover="showDescription(
          'Text', myText);" 
     onmouseout="revertDescription();" 
     alt="Image description">
scroll top