gpt4 book ai didi

javascript - 我是否需要转换 HTMLCollection 或 Nodelist 来创建节点数组?

转载 作者:行者123 更新时间:2023-11-30 13:46:40 25 4
gpt4 key购买 nike

又是菜鸟。我根据正在阅读的一本书(Eloquent JavaScript)做这个练习。它应该像“getElementByTagName”一样工作。下面的第一个函数不返回任何内容。第二个不能通过“while”之后的“if”语句。

谢谢,

function tagSearch (node, name) {

let tagArrays = [];
let childrenNode = node.childNodes;

if(childrenNode.length != 0) {
for(let i = 0; i < childrenNode.length; i++) {
let currentNode = childrenNode[i];
if(currentNode == Node.ELEMENT_NODE && currentNode.nodeName == name.toUpperCase()) {
tagArrays.push(currentNode);
}
let child = tagSearch(currentNode, name )
if(child) {
tagArrays.concat(child);
}
}
}
return tagArrays;
}

function tagSearch (node, name) {

let tagArrays = [];
let currentNode = node.firstElementChild;

while(currentNode != null) {
if(currentNode.tagName == name.toUpperCase()) {
tagArrays.push(currentNode);
}
let descendant = tagSearch(currentNode, name );
if(descendant) {
tagArrays.concat(descendant);
}
let currentNode = currentNode.nextElementSibling;
}
return tagArrays;
}

最佳答案

你错过了你的情况。在这里,您将节点与预期的节点类型进行比较:

currentNode == Node.ELEMENT_NODE

您需要检查节点的类型,而不是节点本身:

currentNode.nodeType == Node.ELEMENT_NODE

此外,这段代码没有做任何事情:

tagArrays.concat(child);

concat() 函数返回新数组,而不是改变旧数组。因此,要将元素添加到 tagArrays,您应该这样做:

tagArrays = tagArrays.concat(child);

or

tagArrays.push(...child);

or

tagArrays.splice(tagArrays.length - 1, 0, child);

关于javascript - 我是否需要转换 HTMLCollection 或 Nodelist 来创建节点数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59195021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com