-1

当我们使用document.getElementsByTagName("body")[0]. 我有以下代码要执行。当我们在下面<script type="javascript" src=""myJs.js"></script>的某个地方使用时,流程有什么区别。<body> or <head>

function addJavascript(jsname,pos) {
var th = document.getElementsByTagName(pos)[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.setAttribute('src',jsname);
th.appendChild(s);
}
addJavascript("myJs.js","body");

我也想知道当我们使用document.getElementsByTagName("head")[0].

4

3 回答 3

2
document.getElementsByTagName("tag here")[0]

这将找到 html 中带有指定标签的第一个元素

在 body 和 head 标签的情况下,它没有做任何特殊的事情,因为它们只定义了一次。

于 2013-10-16T10:00:10.357 回答
1

我不确定这里实际问的是什么,所以我猜你对这个[0]部分感到困惑。

好吧,document.getElementsByTagName查询标记中未知数量的元素。它将返回 a HTMLCollection,这是一个类似数组的结构。这就是为什么我们需要通过方括号来处理该列表中的特定元素。

<body><head>元素只允许在有效的 HTML 文档中出现一次,所以这看起来有点混乱。获取这些节点的更好方法是直接通过参考:

var head = document.head,
    body = document.body;

为了在保存方面,将它与后备结合起来,你就可以了

head = document.head || document.getElementsByTagName("head")[0];
于 2013-10-16T10:03:09.253 回答
0

根据您对问题的评论:

我的目的是了解 document.getElementsByTagName("body")[0] 的作用。

document.getElementsByTagName查找在您调用它时存在于文档中的具有该标签(body, head, p, a,div等)的元素。因此,由于您使用标签 name 调用它"body",它会查找body文档中的所有元素,如果有任何时候调用它。

[0]然后尝试从结果列表中获取第一个条目。如果列表为空,则返回undefined

所以document.getElementsByTagName("body")[0]要么给你body文档中的第一个(可能是唯一的)元素,或者undefined如果没有(还没有)。

<script type="javascript" src=""myJs.js"></script>当我们在下面的某个地方使用<body><head>与下面的一起使用时,流程有什么区别。

好吧,如果你有它<head>并且你运行它来寻找body标签,document.getElementsByTagName('body')将返回一个空节点列表(因为head 必须在 之前body),等等[0]这会给你undefined,并且尝试使用appendChild它会失败。


如果您只想script从脚本可靠地在页面上添加一个元素,通常的做法是使用:

var parent = document.getElementsByTagName('script')[0].parentNode;
// ...create your new script element
parent.appendChild(yourScript);

...因为如果您的脚本正在运行(并且您没有推迟它并删除包含它的脚本元素),您知道页面上的某处script至少有一个元素。

于 2013-10-16T10:01:29.590 回答