Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过javascript生成html:避免HTMLIDY错误_Javascript_Htmltidy_Html Generation - Fatal编程技术网

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

通过javascript生成html:避免HTMLIDY错误,javascript,htmltidy,html-generation,Javascript,Htmltidy,Html Generation,我有一个通过JavaScript生成HTML的网页 在Firefox 22中使用HTML validator 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"> ...

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

在Firefox 22中使用HTML validator 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>

......
var someHtml='Hello world!';
变量e;
e=window.document.createElement('div');
e、 innerHTML=someHtml;
window.document.body.appendChild(e);

显然,解析器假定
嵌套在

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

注意:中的答案对我没有帮助,因为我知道代码是有效的。我想重新格式化以避免验证错误。

您不能将
放入
中。只能包含,其中不包含

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

另外,由于doctype是XHTML,您应该用
部分包装脚本。

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

HTMLTidy的反对意见是,您正在放置它认为您希望浏览器呈现为HTML的内容,您需要对实体进行替换(将
替换为
),以便将其解释为文本

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


你好,世界
//

我不是想问显而易见的问题,但是您正在检查的DTD对div可以和不可以在哪里有什么说明呢?我在问题中添加了
。“显然解析器假设div嵌套在
中”-我怀疑这一点。您是对的。我更新了示例,使用div而不是pre。问题仍然是你是对的。我更新了示例,使用div而不是pre。问题还是一样