Javascript 为什么可以';我不能从body标签访问子节点吗?
我无法在[9],[11]访问尸体孩子的div标签 我以前使用bd.firstChild、bd.childNodes[n],但总是出现nullJavascript 为什么可以';我不能从body标签访问子节点吗?,javascript,html,nodes,Javascript,Html,Nodes,我无法在[9],[11]访问尸体孩子的div标签 我以前使用bd.firstChild、bd.childNodes[n],但总是出现null 在此处插入标题 var rt=document.getRootNode(); document.write(rt.nodeName+“”)//文件 var-ht=rt.firstChild; document.write(ht.nodeName+“”);//html var hd=ht.firstChild; document.write(hd.nod
在此处插入标题
var rt=document.getRootNode();
document.write(rt.nodeName+“”)//文件
var-ht=rt.firstChild;
document.write(ht.nodeName+“”);//html
var hd=ht.firstChild;
document.write(hd.nodeName+“”);//头
var bd=hd.nextSibling;
document.write(bd.nodeName+“”);//身体
1.
2.
在将代码段编辑为document.write之前,在文档完成之前,我创建了下面的代码-许多人在文档完成后不使用document.write,但在呈现标记/节点之前,您无法显示它们:
这似乎是一些奇怪的事情,只是得到节点-铬增加了一个新线后,头部之前的身体
这就说明了这个问题
你想退房吗
// https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter/acceptNode
// https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker
var nodeIterator=document.createNodeIterator(
//要用作根的节点
document.querySelector('html'),
/只考虑作为文本节点的节点(节点类型3)
NodeFilter.SHOW_元素,
//对象,该对象包含用于acceptNode方法的函数
//NodeFilter的
{
acceptNode:函数(节点){
//确定是否接受、拒绝或跳过节点的逻辑
//在这种情况下,只接受包含内容的节点
//除了空白
if(!/^\s*$/.test(node.data)){
返回NodeFilter.FILTER\u接受;
}
}
},
假的
);
//显示作为根节点的子节点的每个非空文本节点的内容
var节点;
while((node=nodeIterator.nextNode()){
console.log(node.tagName);
}
/*------------旧代码----------------*/
/*
var rt=document.getRootNode();
log(“Root”,rt.nodeName+”)//文件
var-ht=rt.firstChild;
console.log(“根的第一个子项”,ht.nodeName+”);//html
var HTML=ht.nextSibling;
console.log(“html的下一步绑定”,html.nodeName+”);//HTML
var HEAD=HTML.firstChild;
console.log(“Html的第一个子项”,HEAD.nodeName+”);//头
var newLine=HEAD.nextSibling;
var BODY=newLine.nextSibling;
console.log(“newLine的nextSibling”,BODY.nodeName+”);//身体
*/
在将代码段编辑为document.write之前,在文档完成之前,我创建了下面的代码-许多人在文档完成后不使用document.write,但在呈现标记/节点之前,您无法显示它们:
这似乎是一些奇怪的事情,只是得到节点-铬增加了一个新线后,头部之前的身体
这就说明了这个问题
你想退房吗
// https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter/acceptNode
// https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker
var nodeIterator=document.createNodeIterator(
//要用作根的节点
document.querySelector('html'),
/只考虑作为文本节点的节点(节点类型3)
NodeFilter.SHOW_元素,
//对象,该对象包含用于acceptNode方法的函数
//NodeFilter的
{
acceptNode:函数(节点){
//确定是否接受、拒绝或跳过节点的逻辑
//在这种情况下,只接受包含内容的节点
//除了空白
if(!/^\s*$/.test(node.data)){
返回NodeFilter.FILTER\u接受;
}
}
},
假的
);
//显示作为根节点的子节点的每个非空文本节点的内容
var节点;
while((node=nodeIterator.nextNode()){
console.log(node.tagName);
}
/*------------旧代码----------------*/
/*
var rt=document.getRootNode();
log(“Root”,rt.nodeName+”)//文件
var-ht=rt.firstChild;
console.log(“根的第一个子项”,ht.nodeName+”);//html
var HTML=ht.nextSibling;
console.log(“html的下一步绑定”,html.nodeName+”);//HTML
var HEAD=HTML.firstChild;
console.log(“Html的第一个子项”,HEAD.nodeName+”);//头
var newLine=HEAD.nextSibling;
var BODY=newLine.nextSibling;
console.log(“newLine的nextSibling”,BODY.nodeName+”);//身体
*/
- 每当遇到
元素时,浏览器的网页解析器(和文档生成器)就会暂停(假设它没有
或async
属性)defer
会在调用时立即将参数文本添加到文档流中。document.write
- 参数文本被附加到当前解析的文档文本中,然后同步地馈送到文档生成器中。
- 这种同步行为,以及解析文本和从中创建文档节点的成本高昂,正是
被弃用且不鼓励使用的原因document.write
- 这种同步行为,以及解析文本和从中创建文档节点的成本高昂,正是
- 参数文本被附加到当前解析的文档文本中,然后同步地馈送到文档生成器中。
- 您正在将人类可读的文本传递到
文档中。写入
,这样新的
节点将立即添加到#text
元素所在的
元素中 - 但是所有这些都是不相关的,因为在你的
第一个孩子实际上是一个
节点,由#text
和
之间的空格组成,消除这一点的唯一方法是使用
而不是(\r\n\r\n”)
v