javascript - 为什么我的浏览器强制将 script 标签放在 body 标签内?

标签 javascript html dom

我试图从一开始就学习 JavaScript 以理解它。

我在这里想做的是输出 <body> 中找到的每个元素的节点类型。标签。据我所知,<body>之间有看不见的文本。的子元素由于某种未知的原因,这使得输出

3 1 3 1

我把<script> <body> 之外的标签标签,但它仍然被计入 for 中循环,结果是 1 的最后一位数字在 3 1 3 1循环序列。为什么?为什么是<script>标签被强制放在 <body> 内由浏览器标记?

<html>
    <body id = "bodyTest"> 
        <p>Some Text</p>
    </body>

    <script type="text/javascript">
        var c = document.body.childNodes;

        var txt = "";
        for(var k = 0; k < c.length; k++) {
            txt += c[k].nodeType + " ";
            console.log(txt);
            console.log(c[k].nodeName);
        }
        alert(txt);
    </script>
</html>

这是我正在使用的代码。

<html>
    <body id = "bodyTest"> 
        <p>Some Text</p>
    </body>

    <script type="text/javascript">
        // Code above
    </script>
</html>

最佳答案

这不是有效的 HTML。 <html>标签只能包含 <head><body>标签,而不是<script> .

参见the specification :

Permitted contents
One head element, followed by one body element

当您的浏览器遇到损坏的 HTML 时,它会尝试修复它。在这种情况下,这意味着治疗您的 <script>标签就像在 <body> 中一样.

关于javascript - 为什么我的浏览器强制将 script 标签放在 body 标签内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782238/

相关文章:

javascript - 如何在javascript中获取元素的真实位置

javascript - 错误 : 'console is not defined. [no-undef] - 括号

javascript - 从javascript中的搜索框获取值(value)

javascript - exit().remove() 在 d3.js 更新之前不会删除旧图表

javascript - joi_1.default.validate 不是函数

html - div彼此相邻,对齐到底部

javascript - 我是否需要移除或删除我创建但未附加到 DOM 的 HTML 元素?

javascript - 获取 HTML 文档的当前内存使用情况?

PHP 表单 - 使用一个或多个复选框更新数据库行

javascript 无法显示警报