Javascript:如何修复由&引起的W3验证错误

时间:2009-09-27 10:31:38

标签: javascript w3c-validation

有没有办法解决JavaScript和& w3验证的原因?问题是我必须使用&&在if语句中,这两个&&'s会导致w3验证错误。

编辑: 与“<”相同的问题和“>”。

4 个答案:

答案 0 :(得分:18)

你可以做一些事情。

您可以将其括在HTML评论中:

<script type="text/javascript">
<!--

if (foo && bar) ...

//-->
</script>

您可以将其封装在CDATA部分中:

<script type="text/javascript">
// <![CDATA[

if (foo && bar) ...

// ]]>
</script>

您可以在文件中加入:

<script src="foobar.js" type="text/javascript"></script>

答案 1 :(得分:3)

主要答案是:将JavaScript文件用于JavaScript,而不是HTML文件,并使用脚本标记的src属性。 (将所有JS合并到一个文件中,最小化,gzip等以获得性能。)

但是,如果绝对必要,你可以在HTML中嵌入JavaScript。使用有效的现代DOCTYPE,您不必使用评论标签和CDATA部分。

有效的HTML5示例:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Example</title>
<script type='text/javascript'>
function foo() {
   var a = 1, b = 2;

   if (a && b) {
      alert("Both");
   }
   if (a < b) {
      alert("a < b");
   }
   if (a > b) {
      alert("a > b");
   }
}
</script>
</head>
<body>
<p>Hi there</p>
</body>
</html>

如果将doctype更改为

,那么也将验证HTML4严格
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

请注意,在这两种情况下,您都需要注意脚本中的结束标记 -

这会导致问题:

<script type='text/javascript'>
alert("</td>");
</script>

这可以通过使用反斜杠为斜杠添加前缀来解决问题(或者您可以将结束标记分解为单独的字符串文字):

<script type='text/javascript'>
alert("<\/td>");
// -or-
alert("<" + "/td>");
</script>

但同样,基本的答案是:当你可以避免使用JavaScript时,不要在HTML文件中嵌入JavaScript,使用JavaScript文件。

答案 2 :(得分:0)

根据您的描述,我怀疑您正在讨论HTML标记中的事件属性(例如onclick)中的脚本。在那种情况下,脚本代码需要进行HTML编码。以利亚在那里击中了钉子。

例如:

<input type="submit" onclick="if(somevar &amp;&amp; othervar) callFunc(&quot;clicked&quot;);">

您无需在<script></script>区块中执行此操作。

答案 3 :(得分:-1)

&&amp;<&lt;>&gt;一起逃脱。