Javascript 获取直接第一个子元素
我正在编写一个Chrome内容脚本扩展,我需要能够针对一个特定的元素,不幸的是,该元素除了父元素之外没有唯一的标识符 我需要针对Javascript 获取直接第一个子元素,javascript,dom,Javascript,Dom,我正在编写一个Chrome内容脚本扩展,我需要能够针对一个特定的元素,不幸的是,该元素除了父元素之外没有唯一的标识符 我需要针对parentElement的直接第一个子元素console.log(parentElement)完美地报告了这两个子元素/节点,但无论我做什么,后续的控制台日志(针对子节点的日志)总是返回一个未定义的值 这是我目前的代码 (我已排除实际姓名,以避免混淆和额外的、不必要的解释) 如何选择父元素的第一个子元素/节点 更新: parentElement.children[0
parentElement
的直接第一个子元素console.log(parentElement)
完美地报告了这两个子元素/节点,但无论我做什么,后续的控制台日志(针对子节点的日志)总是返回一个未定义的值
这是我目前的代码
(我已排除实际姓名,以避免混淆和额外的、不必要的解释)
如何选择父元素的第一个子元素/节点
更新:
parentElement.children[0]
也有与parentElement.childNodes[0]
相同的错误。这两个节点都将为您提供第一个子节点:
console.log(parentElement.firstChild);//或
log(parentElement.childNodes[0]);
如果需要作为元素节点的第一个子节点,请使用:
console.log(parentElement.children[0]);
编辑
啊,我现在明白你的问题了parentElement
是一个数组
如果您知道它只会返回一个结果,那么您应该使用[0]
对dearray(是的,我编造了这个词)元素:
var parentElement=document.getElementsByClassName(“uniqueClassName”)[0];
您想要第一个子节点还是第一个子元素(节点)?不要让父div和子元素之间有空格,但它在一行childnodes[0]中返回未定义的
对吗?请参阅下面的示例,我的答案是:所有内容都返回未定义(如图中所示),当您使用[0]
时,它会触发整个脚本。我也尝试了.children[0]
,但也没有成功/@BenHooper更新了我的答案,因为您添加了屏幕截图,我注意到了实际问题。还要注意,要获取第一个子元素节点,有一个只读属性firstElementChild
ParentNode.firstElementChild
childNodes[0]每次都不返回任何内容。它是childNodes[1]又名base1No,childNodes[1]
始终是第二个子节点。请注意,如果DOM是用包含空格(换行符、制表符、空格等)的HTML构建的,则childNodes[0]
是包含该空格的文本节点,childNodes[1]
是元素节点(但它仍然是第二个子节点)。
function injectCode() {
var parentElement = document.getElementsByClassName("uniqueClassName");
if (parentElement && parentElement.innerHTML != "") {
console.log(parentElement);
console.log(parentElement.firstElementChild);
console.log(parentElement.firstChild);
console.log(parentElement.childNodes);
console.log(parentElement.childNodes[0]);
console.log(parentElement.childNodes[1]);
} else {
setTimeout(injectCode, 250);
}
}