JavaScript + 递归函数返回未定义

标签 javascript recursion

我有一个简单的 html 结构需要遍历。出于某种原因,我的递归函数在任何嵌套节点上返回“undefined”,但对于父节点则不返回。不幸的是,这需要是 native js,没有 jQuery。谢谢!

HTML:

<div id="container">
  <div id="head"> 
    <span id="left"><</span> 
    <span id="right">></span> 
  </div>
</div>

脚本:

var h = hasId(container, 'head');
var l = hasId(container, 'left');
var r = hasId(container, 'right');

console.log(h + " : " + r + " : " + l);
//[object HTMLDivElement] : undefined : undefined

function hasId(ele, id) {
    for (var i = 0; i < ele.childNodes.length; i++) {
        var child = ele.childNodes[i];
        if(child.id == id) return child;
        else hasId(child, id);
    }
}

最佳答案

您只是在递归调用中调用return。此外,您应该测试其结果是否已定义。是则返回,否则继续循环。

var h = hasId(container, 'head');
var l = hasId(container, 'left');
var r = hasId(container, 'right');

console.log(h + " : " + r + " : " + l);
//[object HTMLDivElement] : undefined : undefined

function hasId(ele, id) {
    for (var i = 0; i < ele.childNodes.length; i++) {
        var child = ele.childNodes[i];
        if(child.id == id) return child;
        else {
          var next = hasId(child, id);
          if(next) return next;
        };
    }
}​

关于JavaScript + 递归函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762312/

相关文章:

javascript - 为什么空对象对流类型中的非精确类型注解有效?

java - 将递归结果添加到 ArrayList

javascript - 如何从控制台确定哪个库使用 $ 符号?

javascript - 检测 Google 网站翻译器的语言变化

c - 帮助理解使用递归反转链表的代码片段

Swift 递归闭包栈溢出 bug

python - 递归函数运行时间分析

javascript - 警告 : Recursive process. 检测到 nextTick

javascript - 鼠标悬停插件上的 mootools 图像放大

javascript - 为什么 ng-model 不更新?