在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">
有很多方法可以达到目的
<代码>或
而不是
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<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');
}