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
。