通过javascript生成html:避免htmltidy错误

时间:2013-07-17 09:36:08

标签: javascript htmltidy html-generation

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

在Firefox 22中使用HTML验证器0.9.5.1进行验证时,出现错误:'文档类型不允许元素" span"这里'

我正在使用此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元素的解决方案。

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

2 个答案:

答案 0 :(得分:1)

您无法将<div>放入<pre><pre>只能包含phrasing content<div>不包含{。}}。

此外,您应该使用<![CDATA[ ... ]]>部分包装脚本,因为doctype是XHTML。

答案 1 :(得分:1)

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

HTML Tidy的反对意见是,您正在放置一些它认为您希望浏览器呈现为HTML的内容,您需要对实体进行替换(将<>替换为&lt;并且&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>