[英]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 保罗
parent
is undefined. parent
未定义。 You may have meant ele.parentNode
, but see below. 您可能已使用ele.parentNode
,但请参见下文。 .target
, I take it e
is an event. 按照名称约定和.target
,我认为e
是一个事件。 But you pass parent
, which probably isn't an event. 但是您传递了parent
,这可能不是事件。 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.