0

我有一个通过 JavaScript 生成 HTML 的网页。

在 Firefox 22 中使用 HTML 验证器 0.9.5.1 进行验证时,出现错误:“文档类型不允许此处的元素“跨度””

我正在使用这个 JavaScript:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 ...<body>...
 <script type='text/javascript'>
var someHtml = '<span>Hello world!</span>';
var e;
e = window.document.createElement('div');
e.innerHTML = someHtml;
window.document.body.appendChild(e);
 </script>

显然解析器假设它<span>嵌套在里面<script>

我应该如何重写 JavaScript 以通过 HTML 验证?我更喜欢不需要我创建 HTML 元素的解决方案。

注意:在 jQuery 脚本中避免 HTML-in-string / html() 中的答案对我没有帮助,因为我知道代码有效。我想重新格式化以避免验证错误。

4

2 回答 2

1

你不能放在<div>里面<pre><pre>只能包含短语内容,其中<div>不包含。

<![CDATA[ ... ]]>此外,由于 doctype 是 XHTML ,因此您应该使用 section 来包装您的脚本。

于 2013-07-17T09:47:06.337 回答
1

pre元素用于预格式化文本,而不是更多 HTML。

HTML Tidy 的反对意见是,您正在放置一些它认为您希望浏览器呈现为 HTML 的内容,您需要对实体进行 scape(替换<>使用&lt;and &gt;),以便将其解释为文本。

对评论的更新:对于 XHTML doctype,文档必须是格式良好的 XML。因此,您需要CDATA在脚本标签内标记:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Hello world</title>
  </head>
  <body>
  <script type='text/javascript'>
  //<![CDATA[
  var someHtml = "<div>Hello world!</div>";
  var e;
  e = window.document.createElement('div');
  e.innerHTML = someHtml;
  window.document.body.appendChild(e);
  //]]>
  </script>
  </body>
</html>
于 2013-07-17T09:47:50.990 回答