2013-05-15 48 views
1

我編寫了一個名爲getParentNode的函數,用於獲取由tagName過濾的某個特定父節點。代碼如下。我不明白爲什麼函數返回「undefined」。我認爲它應該返回特定的parentNode或null。 ORZ! 該代碼也處於http://jsfiddle.net/52ed6/2/爲什麼我的getParentNode函數返回undefined?

<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

在第一個else裏面使用:** return ** getParentNode(obj.parentNode,selector); –

回答

0

我猜想,你需要改變這一點:

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

至:

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

沒有return你的函數將執行,然後不返回任何值給原始調用者。您需要return以遞歸方式進行此項工作。

+0

感謝您的回答!我想沒有「返回」的函數會返回一些值到其他空間。 –

1
getParentNode(obj.parentNode, selector); 

需要return

return getParentNode(obj.parentNode, selector); 
0

此特定塊繞過任何返回語句。因此,它隱含地返回沒有任何定義的值,因此未定義。

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

你可能想

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