1

我编写了一个名为 getParentNode 的函数,用于获取由 tagName 过滤的特定 parentNode。代码如下。我不明白为什么函数返回“未定义”。我认为它应该返回特定的 parentNode 或 null。欧兹!代码也在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>
4

4 回答 4

1
getParentNode(obj.parentNode, selector);

需要一个return.

return getParentNode(obj.parentNode, selector);
于 2013-05-15T17:47:29.657 回答
0

此特定块绕过任何返回语句。因此,它隐式返回没有任何定义的值,因此是未定义的。

            } else {
                getParentNode(obj.parentNode, selector);
            }

你可能想要

            } else {
                return getParentNode(obj.parentNode, selector);
            }
于 2013-05-15T17:47:58.533 回答
0

你忘了:http return: //jsfiddle.net/52ed6/5/

return getParentNode(obj.parentNode, selector);
于 2013-05-15T17:48:46.667 回答
0

我猜你需要改变这个:

} else {
    getParentNode(obj.parentNode, selector);
}

到:

} else {
    return getParentNode(obj.parentNode, selector);
}

没有return你的函数将执行,然后不返回任何值给原始调用者。您需要return递归地进行这项工作。

于 2013-05-15T17:50:01.293 回答