2013-10-16 488 views
-2

当我们使用document.getElementsByTagName("body")[0]时,浏览器中发生的过程是什么。我有下面的代码被执行。当我们在<body> or <head>的某个地方使用<script type="javascript" src=""myJs.js"></script>时,在流程中有什么区别。当我们使用document.getElementsByTagName(“body”)[0]时会发生什么?

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]会发生什么。

+0

你的问题不明确。你想解释什么在函数的描述中(例如在MDN中)? –

+0

我的意图是知道document.getElementsByTagName(“body”)[0]是做什么的。 –

回答

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

这将找到与标记HTML中的第一个元素指定

在身体和头部标签的情况下,它没有做什么特别的,因为它们只定义一次。

+0

我有一段JavaScript代码,它将在呈现时异步调用。当这段代码被插入到页面时,这是不可预知的。另外,我有一个JavaScript文件,它将被加载到页面中,并将处理JavaScript代码段。我无法更改JS文件中的代码。另外,我无法直接将JavaScript代码放置在页面的某个位置。代码将从外部工具插入到页面中。 –

+0

现在,JavaScript文件包含用于创建图像的document.write方法。但是,不建议使用此方法,因为无法预测写入操作何时发生。例如,如果代码片段在主体呈现完成后以及DOM加载后运行,则页面内容将被完全重写。 我想确保上述最糟糕的情况不应发生。 –

0

从对这个问题您的评论:

我的目的是要知道什么document.getElementsByTagName( “身体”)[0]执行。

document.getElementsByTagName发现存在的文件在当你调用它有该标签作为元素(bodyheadpadiv等),这样因为你与调用它标签名称"body",它会在文档中找到所有body元素,如果在您调用它时有任何元素。

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

因此,document.getElementsByTagName("body")[0]为您提供文档中的第一个(可能是唯一的)body元素,或者如果没有(尚未),则为undefined

是什么流程中的差异,当我们在<body><head>与下面一个使用<script type="javascript" src=""myJs.js"></script>地方。

好吧,如果你有它在<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元素的某处

+0

请在第一个回答中找到我的意见 –

+0

@RaheebM:这与您实际询问的问题无关,然后在Dystroy询问您实际询问的内容时再次确认。如果您想知道如何在不使用'document.write'的情况下可靠地追加内容到页面,请改用这个问题。 *这个问题已经被多人解答。 –

0

我不确定实际上在这里问什么,所以我想你对[0]部分感到困惑。

那么,document.getElementsByTagName查询您标记中的元素数量未知。它会返回一个HTMLCollection,这是一个阵列式的结构。这就是为什么我们需要通过括号来解决该列表中的特定元素。

<body><head>元素只允许在一个有效的HTML文档中被激活,所以这可能看起来有点混乱。一个更好的办法让这些节点是直接通过参考:

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

要在保存方面,结合起来,与后备和你的罚款

head = document.head || document.getElementsByTagName("head")[0]; 
+0

请在上面的答案中找到我的意见 –

相关问题