5

有什么方法可以修复 JavaScript & 在 w3 验证中导致的错误?问题是我必须在 if 语句中使用 &&,而这两个 && 会导致 w3 验证出错。

编辑:“<”和“>”有同样的问题。

4

4 回答 4

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>
于 2009-09-27T10:41:43.253 回答
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 更改为

<!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>

但同样,基本答案是:不要在 HTML 文件中嵌入 JavaScript,如果可以避免,请使用 JavaScript 文件。

于 2009-09-27T10:55:06.260 回答
0

根据您的描述,我怀疑您说的是 HTML 标记中的事件属性内的脚本(例如 onclick)。在这种情况下,脚本代码需要进行 HTML 编码。以利亚在那儿一针见血。

例如:

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

您不需要在<script></script>块内执行此操作。

于 2009-09-28T00:02:43.733 回答
-1

&&amp;<和逃逸。&lt;_ >_&gt;

于 2009-09-27T21:55:41.040 回答