2013-05-15 2 views
1

Я пишу функцию с именем getParentNode, которая использует, чтобы получить определенный parentNode, отфильтрованный tagName. Код выглядит следующим образом. Я не понимаю, почему функция возвращает «undefined». Я думаю, что он должен возвращать определенный parentNode или null. ОРЗ! код также на http://jsfiddle.net/52ed6/2/Почему моя функция getParentNode не указана?

<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

Внутри первого использования: ** return ** getParentNode (obj.parentNode, селектор); –

ответ

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); 
      } 
Смежные вопросы