我有一个通过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中的答案对我没有帮助,因为我知道代码有效。我想重新格式化以避免验证错误。
答案 0 :(得分:1)
您无法将<div>
放入<pre>
。 <pre>
只能包含phrasing content,<div>
不包含{。}}。
此外,您应该使用<![CDATA[ ... ]]>
部分包装脚本,因为doctype是XHTML。
答案 1 :(得分:1)
pre
元素用于预先格式化的文本,而不是HTML。
HTML Tidy的反对意见是,您正在放置一些它认为您希望浏览器呈现为HTML的内容,您需要对实体进行替换(将<
和>
替换为<
并且>
)以便将其解释为文字。
对评论的回复更新:
使用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>