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

Спасибо, что сэр работает!. Я - репутация «11» в stackoverflow ... Мне нужна репутация «15», чтобы проголосовать за хорошие ответы .... это означает, что мне нужен только один человек на мой ответ, и я буду 15 репутации. – zm455

+0

@ zm455 Вы все равно можете принять ответы. Если вы чувствуете, что этот ответ помог вам, попробуйте нажать отметку в моем ответе. И это не принуждение. :) –

+0

кто-то проголосовал за мой вопрос, так что теперь я могу проголосовать за ваш ответ. Большое спасибо, сэр, у вас хороший день ;-) – zm455

Смежные вопросы