我编写了一个名为getParentNode的函数,用于获取一些由tagName过滤的特定parentNode。代码如下。我不明白为什么函数返回“undefined”。我认为它应该返回特定的parentNode或null。 ORZ! 代码也在http://jsfiddle.net/52ed6/2/
<html>
<body>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>
<div>
<span id="reply">Reply</span>
</div>
</li>
</ul>
<script>
// Get specific parentNode
function getParentNode(obj, selector){
if (obj.parentNode) {
if ( obj.parentNode.nodeName.toLowerCase() === selector ) {
return obj.parentNode;
} else {
getParentNode(obj.parentNode, selector);
}
} else {
return null;
}
}
var reply = document.getElementById('reply');
// The function getParentNode() novalid
// The next statement popup "undefined", why?
alert(getParentNode(reply, 'li'))
</script>
</body>
</html>
答案 0 :(得分:1)
getParentNode(obj.parentNode, selector);
需要return
。
return getParentNode(obj.parentNode, selector);
答案 1 :(得分:0)
此特定块会绕过任何返回语句。因此,它隐式返回没有任何定义的值,因此,未定义。
} else {
getParentNode(obj.parentNode, selector);
}
你可能想要
} else {
return getParentNode(obj.parentNode, selector);
}
答案 2 :(得分:0)
您忘记了return
:http://jsfiddle.net/52ed6/5/
return getParentNode(obj.parentNode, selector);
答案 3 :(得分:0)
我猜你需要改变这个:
} else {
getParentNode(obj.parentNode, selector);
}
为:
} else {
return getParentNode(obj.parentNode, selector);
}
如果没有return
,您的函数将执行,然后不会向原始调用者返回任何值。你需要return
递归地完成这项工作。