为什么函数中的childNodes [i]返回undefined但是提醒对象?

时间:2010-12-12 19:24:33

标签: javascript dom

好吧,我正在编写自己的getElementByClassName,这是我的问题:

function getElementByClassName(elemento,clase){
        var i = 0;
        if(elemento.hasChildNodes()){
            while(elemento.childNodes[i]){
                if(elemento.childNodes[i].nodeType != 3){
                    if(elemento.childNodes[i].className == clase){
                        return elemento.childNodes[i];  // <---- This is my problem, change to alert
                    }
                    else {
                    getElementByClassName(elemento.childNodes[i],clase);
                    }
                }

                i++
            }
        }
}

var div = getElementByClassName(document.body,"foo");

alert(div);

它警告未定义,但是如果我把(在函数中)警告此警报[objectHTMLDivElement]并且未定义,那么为什么如果这识别出具有警报的[objectHTMLDivElement],则返回undefined?

1 个答案:

答案 0 :(得分:0)

要回答你的问题,你的实现不起作用的原因是因为你在else子句中递归调用你的函数而对返回值什么都不做。这就是你的代码找到对象的原因,但它永远不会被返回。

这是您的稍微改写的版本,但您的方法还有其他限制,一个是找不到多个类的元素(即不会返回<div class="foo bar">)。除非您只是将此作为一项学习练习,否则我建议您使用现有的实施方案,例如Yoni的答案中的链接。

function getElementByClassName(elemento, clase)
{
    var i = 0;
    if (elemento.hasChildNodes())
    {
        while (elemento.childNodes[i])
        {
            if (elemento.childNodes[i].nodeType != 3)
            {
                if (elemento.childNodes[i].className == clase)
                    return elemento.childNodes[i];
                else
                {
                    var result = getElementByClassName(elemento.childNodes[i], clase);
                    if (result != null)
                        return result;
                }
            }
            i++;
        }
    }
    return null;
}