简体   繁体   English

JavaScript递归问题

[英]A javascript recursion problem

I'm writing a js recursion function to find all ancestors of an element a user clicked on. 我正在编写一个js递归函数,以查找用户单击的元素的所有祖先。 my code is like this: 我的代码是这样的:

/**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);     
}

I ran it using firefox, but there's an error message in the error console, "Error: ele.parentNode is undefined". 我使用firefox进行了运行,但错误控制台中显示一条错误消息,“错误:ele.parentNode未定义”。

also, when i reset anc = ' '; 另外,当我重置anc =''; it didn't work either. 它也不起作用。

Thanks! 谢谢!

Paul 保罗

  1. parent is undefined. parent未定义。 You may have meant ele.parentNode , but see below. 您可能已使用ele.parentNode ,但请参见下文。
  2. By name convention and by .target , I take it e is an event. 按照名称约定和.target ,我认为e是一个事件。 But you pass parent , which probably isn't an event. 但是您传递了parent ,这可能不是事件。
  3. You probably want to check that ele.parentNode is valid before getting it's properties. 您可能想要在获取ele.parentNode属性之前检查其是否有效。

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

An undefined value, per Javascript standards, doesn't have a name attribute -- so rather than trying to get the name in one gulp, just do a var parent = e.target.parentNode; 一个undefined值,每使用Javascript标准, 没有一个name属性-因此而不是试图让name一饮而尽,只是做一个var parent = e.target.parentNode; and bail out if THAT is undefined! 如果那是未定义的,请保释!

You should break the recursion like this 你应该这样破坏递归

if(ele.parentNode) return;

parentNode.name is not supported by firefox Firefox不支持parentNode.name

Maybe try something like this: 也许尝试这样的事情:

var anc = [];

function getAncestors(element) {
  if (element.parentNode) {
    anc.push(element.parentNode);
    getAncestors(element.parentNode);
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM