【问题标题】:A javascript recursion problem一个javascript递归问题
【发布时间】:2010-12-09 16:11:33
【问题描述】:

我正在编写一个 js 递归函数来查找用户单击的元素的所有祖先。我的代码是这样的:

/**a global variable.*/
var anc; 

function getAncestors(e){  
 var ele = e.target; 
 var parentName = ele.parentNode.name;    
 anc +=bracket(parentName); 

 if (parentName.toLowerCase() == "undefined" ) return;    
 else getAncestors(parent);     
}

我使用 firefox 运行它,但错误控制台中有一条错误消息,“错误:ele.parentNode 未定义”。

另外,当我重置时 安克 = ' '; 它也没有工作。

谢谢!

保罗

【问题讨论】:

  • 变量parent从何而来? bracket() 函数有什么作用? parent 可能是另一个由其他东西设置的全局变量吗?

标签: javascript recursion


【解决方案1】:

您可能想看看他们如何在 jQuery 中实现 parents 函数。

【讨论】:

    【解决方案2】:

    根据 Javascript 标准,undefined 值不具有 name 属性 - 因此与其尝试一次性获取 name,只需执行 @987654324 @ 并在未定义的情况下退出!

    【讨论】:

      【解决方案3】:
      1. parent 未定义。您可能指的是ele.parentNode,但请参见下文。
      2. 按照名称约定和.target,我认为e 是一个事件。但是你传递了parent,这可能不是一个事件。
      3. 您可能希望在获取 ele.parentNode 的属性之前检查它是否有效。

      【讨论】:

        【解决方案4】:

        你应该像这样中断递归

        if(ele.parentNode) return;
        

        firefox 不支持parentNode.name

        【讨论】:

        • 这应该被否定(if (!ele...),是吗?
        【解决方案5】:

        不妨试试这样的:

        var anc = [];
        
        function getAncestors(element) {
          if (element.parentNode) {
            anc.push(element.parentNode);
            getAncestors(element.parentNode);
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-28
          • 1970-01-01
          • 1970-01-01
          • 2016-02-01
          • 2011-07-27
          • 2022-01-08
          相关资源
          最近更新 更多