Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript字符串中使用HTML标记,同时遵守W3C规则_Javascript_Html_W3c_W3c Validation - Fatal编程技术网

在JavaScript字符串中使用HTML标记,同时遵守W3C规则

在JavaScript字符串中使用HTML标记,同时遵守W3C规则,javascript,html,w3c,w3c-validation,Javascript,Html,W3c,W3c Validation,这是我的密码: <a href="#"> <img src="myimage.jpg" onmouseover="showDescription( 'Text', 'Text with HTML tags in them<br />More text');" onmouseout="revertDescription();" alt="Image description"> 更多文本“);"

这是我的密码:

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

更多文本“);" 
onmouseout=“revertDescription();" 
alt=“图像描述”>
W3C标记验证程序不喜欢这样。它不希望在我的JavaScript代码中包含HTML标记。如果我尝试此操作,它会生成以下错误消息:


字符“您可以将函数包装在文档中其他位置的单独的
标记中,并使用

<script>
//<![CDATA[
    ...code...
//]]>
</script>

//
发件人:

要解决此问题,我们可以做以下两件事之一。最简单的方法,尤其是当Javascript包含不止一行或两行时,是使Javascript位于页面外部,从而使它们在脚本标记之间不存在,从而停止页面验证

如果只是一行或两行,那么可能不值得创建一个外部脚本,因此您需要将内容保留在脚本标记之间,并告诉验证器这将被忽略。我们将Javascript代码放在CDATA标记中,如下所示


把它放在一个区块内如何:

var myText='包含HTML标记的文本
更多文本';
稍后在HTML中:

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

有很多方法可以达到目的

  • 使用
    <
    而不是

  • 获取图像的id,如“image1”,然后
    document.getElementById(“image1”).onmouseover=showDescription(
    “文本”、“包含HTML标记的文本
    更多文本”)
  • 希望这能奏效

    onmouseover="showDescription('Text', 'Text with HTML tags in them<br />More text');" 
    
    这与
    元素形成对比,该元素的内容是
    CDATA
    ,因此在HTML4中没有
    &
    -转义。在XHTML中没有CDATA元素;您可以添加一个
    部分以使XHTML的行为相同,但对于脚本元素和事件处理程序属性来说,通常更简单的方法是避免问题的发生,即从不使用
    &
    替换
    %3E
    并在输出内容时使用unescape

    这不会验证:

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

    第一个块将不兼容,因为里面有
    。如果按照MYYN的建议用//包装代码,则不会兼容。我建议使用这种方法,因为您不能将内联脚本命令定义为CDATA。在这种情况下,验证意味着什么?
    onmouseover="showDescription('Text', 'Text with HTML tags in them&lt;br />More text');" 
    
    onmouseover="showDescription('Text', 'Text with HTML tags in them\x3Cbr />More text');" 
    
    function(){
    return ('<b> bold </b>');
    }
    
    function(){
    return unescape('%3Cb%3E bold %3C/b%3E'); 
    }