2016-04-24 196 views
3

我想用jquery創建一個基本的通用函數,將html列表的所有元素放入數組中。一切似乎都沒問題,但我遇到了一些問題以獲得回報價值。我知道這是一個基本問題,所以我希望你能幫我解決它。jquery:獲取函數的返回值

<script> 
     function listeToArrayById(idListe){ 
      $(function(){ 
       var listChildren = $("#" + idListe).children(); //puts all li children in var listChildren 
       var arrayListChildren = []; 
       $.each(listChildren, function(key, value){ 
        arrayListChildren.push($(this).text()); 
       }) 
       return arrayListChildren; // here it's ok arrayListChildren = ["a", "b", "c"] 
      }) 
     } 
     var ulChildren = listeToArrayById("list1"); 
     window.console.log(ulChildren); // here is my problem because ulChildren is undefined ... I should get an array ["a", "b", "c"] 
    </script> 
</head> 
<body> 
    <ul id="list1"> 
     <li>a</li> 
     <li>b</li> 
     <li>c</li> 
    </ul> 
    </body> 
+1

爲什麼'$(函數(){'在你的函數裏面?當你調用你的函數時,它不會執行它,因爲你在你的函數中放入了$(function(){',所以它等待DOM加載,把'var ulChildren = listeToArrayB YID( 「列表1」); window.console.log(ulChildren);'DOM內準備好並從你的函數中刪除,它會工作。 – putvande

+0

謝謝你的幫助 – zm455

回答

4

你正在一個錯誤的方式使用document ready handler

function listeToArrayById(idListe){ 
    var listChildren = $("#" + idListe).children(); 
    var arrayListChildren = []; 
    $.each(listChildren, function(key, value){ 
     arrayListChildren.push($(this).text()); 
    }) 
    return arrayListChildren; // here it's ok arrayListChildren = ["a", "b", "c"] 
} 

$(function(){ 
    var ulChildren = listeToArrayById("list1"); 
    console.log(ulChildren); 
}); 

而且你可以簡化類似下面的代碼,

function listeToArrayById(idListe){ 
    return $("#" + idListe).children().map(function(){ 
      return this.textContent 
    }).get(); 
} 
+0

非常感謝你,先生它的工作!我在stackoverflow上享有「11」的聲望......我需要一個「15」的聲望才能投票給出好的答案......這意味着我只需要1人投票就可以獲得我的回答,並且我將獲得15的聲望。 – zm455

+0

@ zm455您仍然可以接受答案。如果你覺得這個答案對你有幫助,那麼試着按下我答案中的刻度線。這不是強制。 :) –

+0

有人投了我的問題,所以現在我可以投票支持你的答案。謝謝你,先生,祝你有美好的一天;-) – zm455