jQuery .each () с массивом - PullRequest
6 голосов
/ 09 июня 2010

По сути, я пытаюсь собрать идентификаторы каждого элемента определенного класса и поместить эти идентификаторы в массив. Я использую jQuery 1.4.1 и пробовал использовать .each (), но не совсем понимаю, как передать массив из функции.

$('a#submitarray').click(function(){

    var datearray = new Array();

    $('.selected').each(function(){
        datearray.push($(this).attr('id'));
    });

    // AJAX code to send datearray to process.php file

});

Я уверен, что я далеко, так как я довольно новичок в этом, поэтому любая помощь совета была бы удивительной. Спасибо!

Ответы [ 6 ]

12 голосов
/ 09 июня 2010

Вы также можете использовать map():

$('a#submitarray').click(function(){

  var datearray = $('selected').map(function(_, elem) {
    return elem.id;
  }).get(); // edited to add ".get()" at the end; thanks @patrick
  // ajax

});

Метод map() передает каждый индекс (который в моем примере не используется) и элемент в данную функцию и создает для вас массив из возвращаемых значений.

4 голосов
/ 09 июня 2010

Попробуйте с функцией jquery map:

datearray = $('.selected').map(function(){
    return $(this).attr('id');
}).get();

// use ajax to send datearray
1 голос
/ 09 июня 2010

Основываясь на других ответах, вот упрощенная версия:

var datearray = $('selected').map(function() {
  return this.id;
}).get();

Функция map получает идентификатор каждого элемента, а функция get возвращает массив. В анонимной функции, переданной в map, this относится к каждому выбранному элементу по очереди.

1 голос
/ 09 июня 2010

Вам не нужно передавать массив анонимной функции, поскольку он находится в той же области видимости.

0 голосов
/ 09 июня 2010

Массив должен быть загружен;Вы можете отправить его на сервер, используя jQuery.post ...

$.post("process.php", datearray, function(dat) {
  alert('Response: ' + dat);
});
0 голосов
/ 09 июня 2010

Это все выглядит хорошо для меня, массив будет заполнен и будет доступен там, где вы разместили комментарий.Верь в себя.

...