Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当从控制台运行document.getElementsByTagName而不是脚本文件时,为什么会得到冲突的结果?_Javascript - Fatal编程技术网

Javascript 当从控制台运行document.getElementsByTagName而不是脚本文件时,为什么会得到冲突的结果?

Javascript 当从控制台运行document.getElementsByTagName而不是脚本文件时,为什么会得到冲突的结果?,javascript,Javascript,为什么当我跑步时: document.getElementsByTagName('p')[0].innerText; 从控制台返回第一个p元素的内部文本(正确地作为p元素的内部文本),但当我从浏览器通过脚本文件运行它时,控制台将其记录为“未定义” 下面是我从内部.js文件运行的代码: console.log('test', document.getElementsByTagName('p').innerText); 以下是控制台输出:testundefined.getElementsByTa

为什么当我跑步时:

document.getElementsByTagName('p')[0].innerText;
从控制台返回第一个p元素的内部文本(正确地作为p元素的内部文本),但当我从浏览器通过脚本文件运行它时,控制台将其记录为“未定义”

下面是我从内部.js文件运行的代码:

console.log('test', document.getElementsByTagName('p').innerText);

以下是控制台输出:
testundefined
.getElementsByTagName()
返回节点列表。以下是:

document.getElementsByTagName('p').innerText
尝试获取该节点列表的
.innerText
,但节点列表没有
。innerText
,只有单个节点有。您必须访问列表中的一个节点,然后才能获取其
.innerText
,如下所示:

document.getElementsByTagName('p')[0].innerText

另外,当您打开控制台并输入时,文档已经被完全解析。在解析
p
元素之前,正在尝试使用文件中的代码执行相同的测试

确保文档中的
script
标记位于关闭
body
标记之前,以便在遇到该标记时,所有HTML都已解析到内存中

示例:


试图过早获取DOM引用
//这将失败,因为此时,还没有被解析
console.log(document.querySelector(“p”).textContent);
试验


.getElementsByTagName()
返回节点列表。以下是:

document.getElementsByTagName('p').innerText
尝试获取该节点列表的
.innerText
,但节点列表没有
。innerText
,只有单个节点有。您必须访问列表中的一个节点,然后才能获取其
.innerText
,如下所示:

document.getElementsByTagName('p')[0].innerText

另外,当您打开控制台并输入时,文档已经被完全解析。在解析
p
元素之前,正在尝试使用文件中的代码执行相同的测试

确保文档中的
script
标记位于关闭
body
标记之前,以便在遇到该标记时,所有HTML都已解析到内存中

示例:


试图过早获取DOM引用
//这将失败,因为此时,还没有被解析
console.log(document.querySelector(“p”).textContent);
试验


在第二个示例中,您没有选择集合的第一个元素:[0]另一种可能是DOM在初始调用后发生变化,您在控制台中调用了
getElementByTagName
。@user184994我已经考虑过了,但是脚本文件就在结束体标记的正上方。在第二个示例中,您没有选择集合的第一个元素:[0]另一种可能是DOM在初始调用后发生变化,您在控制台中调用
getElementByTagName
。@user184994我已经考虑过了,但是脚本文件就在结束正文标记的正上方。谢谢!我确实检查了我的javascript是否在标签的正上方,并且在标签加载之前没有执行。我的代码上面有p,脚本包括:

请填写所有字段

@hanumadev请参阅我答案的第一部分。您在控制台中测试的是特定节点的文本,代码中的内容是试图获取整个节点列表的
.innerText
。谢谢!我确实检查了我的javascript是否在标签的正上方,并且在标签加载之前没有执行。我的代码上面有p,脚本包括:

请填写所有字段

@hanumadev请参阅我答案的第一部分。您在控制台中测试的是特定节点的文本,代码中的内容是试图获取整个节点列表的
.innerText