2010-12-12 57 views
1

嗯,我書面方式我自己getElementByClassName,這是我的問題:爲什麼函數中的childNodes [i]返回undefined,但是提醒一個對象?

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]和不確定的,那麼,爲什麼這個返回undefined如果這意識到這是一個帶有alert的[objectHTMLDivElement]?

回答

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; 
} 
+0

謝謝,它的工作!,是的,這是學習,我會研究你的代碼。 – 2010-12-12 19:50:22

相關問題