【问题标题】:why won't this validate (jquery problem)?为什么这不验证(jquery 问题)?
【发布时间】:2009-05-19 14:05:46
【问题描述】:

在我的网站上,我使用 jquery 循环插件制作带有寻呼机的幻灯片。 这个例子: http://malsup.com/jquery/cycle/pager.html

所以在我的文档的开头,我有一个类似的脚本:

<script type="text/javascript">
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
</script>

我的文档类型是 XHTML Strict。

当我尝试验证页面时,我收到以下错误: “文档类型不允许此处的元素“div”” 和 “省略了“div”的结束标记,但指定了 OMITTAG NO”,因为 div 标记未关闭。

有没有办法使用 jquery 并让它进行验证?

【问题讨论】:

  • 您能否链接到您的 HTML 或发布您的 HTML 示例?
  • 没关系,我在 Mikes 示例页面上遇到了同样的问题。

标签: jquery validation xhtml-1.0-strict xhtml


【解决方案1】:

实际上,您的代码未验证的原因是因为某些字符不允许在 XHTML 中使用(例如“&lt;”等),因此必须将它们包装在 XHTMLCDATA 部分中(由于XML 解析规则的严格性质)。 HTML 注释标记(特别是双破折号“--”)也不允许出现在 SCRIPT 块中,因为它们不是 有效 可理解的 JavaScript。因此,不要使用 HTML 注释标记,您应该将代码包装在“CDATA 标记部分”中以传递验证器,而不会混淆 JavaScript 引擎:

<script type="text/javascript">
//<![CDATA[
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
//]]>
</script>

查看以下页面了解更多信息:

  1. XHTML 1.0 recommendation: 4.8. Script and Style elements
  2. Properly Using CSS and JavaScript in XHTML Documents

【讨论】:

  • 谢谢,知道非常有用。比试图以迂回的方式绕过验证器要好得多。
【解决方案2】:

如果您将 HTML 注释标签放入脚本块,验证器将忽略该代码块并正确验证。

<script type="text/javascript">
<!--
$('#s4').before('<div id="nav">').cycle({ 
    fx:     'turnDown', 
    speed:  'fast', 
    timeout: 3000, 
    pager:  '#nav' 
});
//-->
</script>

【讨论】:

  • 验证器似乎不尊重伪 HTML 注释;使用&lt;div&gt;&lt;\/div&gt;(例如转义斜线)代替了
【解决方案3】:

您可以通过以下方式摆脱错误:

$('#s4').before('<' + 'div id="nav">').cycle({ ...

这应该可以防止验证器检测到脚本标签中的任何 HTML。我 - 我会忍受这个错误,因为我知道这是验证器的问题,而不是我的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多