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

Javascript:如何修复由&;引起的W3验证错误;,javascript,w3c-validation,Javascript,W3c Validation,有没有办法修复JavaScript&在w3验证中导致的错误?问题是我必须在if语句中使用&&这两个&&会导致w3验证中出现错误 编辑: “.”也有同样的问题。您可以做一些事情 您可以将其包含在HTML注释中: <script type="text/javascript"> <!-- if (foo && bar) ... //--> </script> 您可以将其包含在CDATA区域中: <script type="text/j

有没有办法修复JavaScript&在w3验证中导致的错误?问题是我必须在if语句中使用&&这两个&&会导致w3验证中出现错误

编辑:
“.”也有同样的问题。

您可以做一些事情

您可以将其包含在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>

主要答案是:对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>

例子
函数foo(){
变量a=1,b=2;
如果(a&b){
警惕(“两者”);
}
if(ab){
警报(“a>b”);
}
}
你好

如果将doctype更改为

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

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

这导致了以下问题:

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

警报(“”);
这可以通过在斜杠前面加反斜杠来解决问题(或者可以将结束标记拆分为单独的字符串文字):


警报(“”);
//-或-
警报(“”);

但是,基本的答案是:如果可以避免,不要在HTML文件中嵌入JavaScript,使用JavaScript文件,
with
根据您的描述,我怀疑您所说的脚本位于HTML标记(例如onclick)中的事件属性内。在这种情况下,脚本代码需要进行HTML编码。以利亚在那里一针见血

例如:

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


您不需要在
块中执行此操作。

如果显示一些代码会更好。您使用的HTML版本是什么?顺便问一下:逻辑AND始终可以用逻辑AND和not表示:a&&B=!(!A | |!B)+1以使用JavaScript文件。其他两个选项有点过时,请改用现代DOCTYPE。请确保注释掉HTML注释开头。如果启用了E4X(
type
contains
;E4X=1
),则其中的代码将是注释文字。@TJ我发现一些.js如果不是内联的,将崩溃。。(即GoogleMapV3)这在XHTML中非常有效……但在与HTML兼容的XHTML中,它会崩溃。我不需要测试这个琐碎的东西。这是HTML和XHTML之间区别的一个非常基本的部分。这就是说,这里有一个测试用例:(它在Firefox中出现了预期的错误。我不想在其他浏览器中进行测试)。您的测试用例在脚本标记中,不需要进行HTML编码。然而,在HTML内部(在标记属性上),它确实需要像我上面给出的示例那样进行编码。问题没有具体说明是关于属性值还是脚本元素。脚本元素的可能性更大,因为内在事件属性中往往包含简单的函数调用,所以假设它们是我们讨论的内容是一个合理的假设。根据最初的帖子,我实际上假设它在属性上,而不是在脚本块内。我不确定以利亚是否做出了同样的假设,尽管他没有说那么多。嗯。。。被推倒,不知道为什么。无论谁这样做,都可能想阅读该标准,它绝对适用于HTML和XHTML。这同样适用于锚定标记中的URL等。
<input type="submit" onclick="if(somevar &amp;&amp; othervar) callFunc(&quot;clicked&quot;);">