前端小知识-格式化标签
常见的html格式化标签:a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u.
对于以下代码
<!DOCTYPE html>
<html>
<head></head>
<body>
<div>
<p><b>666</p>
</div>
<div>aaa</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
渲染引擎会将其解析成
<html>
<head></head>
<body>
<div>
<p><b>666</b></p>
<b></b>
</div>
<b>
<div>aaa</div>
</b>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
即浏览器认为格式化标签的开闭标签可能是会跨节点的(非同一级)
后续查找没有找到闭标签会在原节点基础上添加格式化标签为父节点
因为 b 等带有格式化的标签会特殊处理,遇到一个开标签时会它们放到一个列表里面:
m_activeFormattingElements.append(currentElementRecord()->stackItem());
1
遇到一个闭标签时,又会从这个列表里面删掉。每处理一个新标签时就会进行检查和这个列表和栈里的开标签是否对应,如果不对应则会 reconstruct :重新插入一个开标签。因此 b 就不断地被重新插入,直到遇到下一个b的闭标签为止。
编辑 (opens new window)
上次更新: 2024/09/01, 23:56:56