当我遇到一个奇怪的错误时,我正在为IE8和IE9中的错误修复错误。 HTML中有一个<section class="create">
标记,但在页面加载后,页面下方的标记会完全相同。起初,我认为有一些不好的javascript克隆section
不知何故,但我禁用了javascript,并且在页面加载后它仍然存在。这必须是创建此标记的HTML解析器,对吧?渲染的HTML根本不匹配HTML文件。
我知道HTML解析器会在缺少</div>
标签或</html>
标签等时添加,但IE会重新打开或< em>添加标签出于某种原因?如果是这样,是什么导致这个?如果不是这种情况,那么当禁用javascript时,可能导致HTML中不存在的标记添加到DOM中的原因是什么?
我正在处理的HTML页面超过20,000行,而且整个地方肯定存在格式错误的HTML,其中任何一个都可能导致DOM被不正确地呈现。如果有一个片段,我可以添加这个有用的问题,请在评论中告诉我。
以下是复制此问题的最小HTML。请注意,它只发生在form
代码中,而不是div
代码中。表单元素关闭后,section
标记在IE8和IE9中重新打开,因此创建了2个section
元素。
<!DOCTYPE html>
<html>
<head></head>
<body>
<form>
<section class="create">
CREATE SECTION
</form>
</body>
</html>
这是一个小提琴:http://jsfiddle.net/VurE6/
为了记录,IE10,Chrome,Firefox和Safari都没有显示此行为(我知道)。
答案 0 :(得分:3)
在某种程度上,所有浏览器都会这样做。例如,试试这个
<b>1<i class="create">2</b>3</i>
在任何浏览器中,你应该看到两个i元素都使用“create”类创建。
关于何时发生这种情况的规则非常复杂,但是当关闭标记不结束其元素后代的效果时会发生这种情况。在IE9中,表单结束标记没有关闭该部分,因此为了使该部分继续,浏览器必须创建第二个部分元素。
虽然这在b和i元素的情况下具有一定的意义,但它对于section没有任何意义,因此在任何实现HTML5解析算法的浏览器中都不会发生这种情况,如IE10和现代Firefox和Chrome,但显然,在IE9中。
有关HTML5如何处理错误的b和i标记问题,请参阅http://www.w3.org/html/wg/drafts/html/master/syntax.html#misnested-tags:-b-i-/b-/i。