0

我一直在阅读很多地方,并且还使用了有关在页面底部包含 javascript 的知识,除非有一些 document.write 脚本或范围问题。但最近,我遇到了一些我从未(可能)见过或使用过的东西。有些人在“i”标签内使用脚本标签。我不知道在其他标签中使用脚本标签的原因。

我非常感谢澄清我的问题。

ps 包含所有脚本标签的“i”标签位于页面底部,就在结束正文标签之前。

4

1 回答 1

7

我假设您正在谈论http://craga89.github.io/notyfy/并且您<i>在 Firebug 的 HTML 面板或类似工具中看到了该标签:

Firebug - HTML 窗格

该页面包含无效的 HTML。特别是,它有几个未闭合的标签。这使得浏览器在呈现页面之前应用了某些修复,因为它需要使用有效的 HTML 才能在内存中生成 DOM 树。主要问题是不能保证所有浏览器都会生成相同的修复程序,或者这些修复程序会按预期工作。

如果您打开原始 HTML 代码(在某些浏览器中您可以点击Ctrl+ U),您会看到<script>标签没有被标签包围<i>。您在 DOM 节点中看到的是浏览器应用修复的结果。

例如,<i>顶部有一个未闭合的标签:

<i>notyfy adds the ability to style notyfy via CSS, as well removing the need for JS-based layouts and implementing event-type callbacks.</p>

如果你想知道的话,一些前端框架,比如 Twitter Boostrap 已经决定(ab)使用<i>标签来显示图标:

<span class="runner" data-layout="top" data-type="alert">Alert <i class="icon-caret-right"></i></span>

当然,这与 JavaScript 无关——这样的图标是用 CSS 生成的。


编辑: HTML 代码和 DOM 树之间有一个微妙但重要的区别。浏览器使用 HTML 代码构建文档的内存表示,称为 DOM 树。HTML 被设计为可能无效,但 DOM 树不能。例如,这个 HTML 代码:

<!DOCTYPE html>
<html>
<head>
<title>Invalid HTML test</title>
</head>
<body>
    <p>Hellow, <i>world</div>
</body>
</html>

...将生成这棵树:

Firebug 的 HTML 面板

如您所见,它们是不同的。为了生成有效的文档结构,我的浏览器已经完全删除了<div>标签,并决定在正文结束之前关闭<p>和标签。<i>

于 2013-09-03T07:00:54.080 回答