2016-04-24 1897 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