Настройка массива с помощью функции jQuery .each ()? - PullRequest
0 голосов
/ 05 февраля 2012

Я пытаюсь настроить массив с помощью функции .each() в jQuery, но кажется, что я не правильно это делаю?

У меня есть атрибуты в HTML, такие как:

<div class="cheers" data-fname = "fname" data-lname="lname">some ish..</div><!-- going through a while loop!-->

Затем у меня есть функция jquery, которая делает что-то вроде этого

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index] = $(".cheers").attr('data-fname')+","+$(".cheers").attr('data-lname');
});

Затем, когда я пытаюсь сделать различные предупреждения:

alert(arrayMe); //this gives me the fname,lname
alert(arrayMe[0]); //this gives me the first fname,lname in the array
alert(arrayMe[0][1]); //this SUPPOSED to give me the first lname, but it gives me a letter...

Ответы [ 5 ]

6 голосов
/ 05 февраля 2012

Вы должны использовать arrayMe[1] вместо arrayMe[0][1].

Вы получаете букву, потому что arrayMe[0] является строкой, а arrayMe[0][1] возвращает второй символ данной строки.Это эквивалентно arrayMe[0].charAt(1).

Если вы хотите построить 2D-массив, используйте:

var arrayMe = [];
$(".cheers").each(function(index){
    var $this = $(this);
    arrayMe[index] = [$this.attr('data-fname'),
                      $this.attr('data-lname')];
});
alert(arrayMe);        // Array. Shows all pairs, eg: [['fname', 'lname'], ...]
alert(arrayMe[0]);     // Array. Shows first pair, eg: ['fname', 'lname']
alert(arrayMe[0][0]);  // String. fname            eg:  'fname'
alert(arrayMe[0][1]);  // String. lname            eg:           'lname'

(я также исправил еще одну проблему вваш код, заменив $('.cheers') на $(this))

1 голос
/ 05 февраля 2012

Как насчет этого:

var arrayMe = $(".cheers").map(function() {
    return [[ $(this).data('fname'), $(this).data('lname') ]];
}).get();

См. Комментарий косоглазия для объяснения, почему необходим двойной возвратный массив.

1 голос
/ 05 февраля 2012

Если вы хотите получить доступ к fname и lname по отдельности, поместите их в массив:

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index] = [$(this).attr('data-fname'),$(this).attr('data-lname')];
});

Кроме того, $(this).attr даст вам атрибут текущего элемента, где $(".cheers").attr всегда даст вам атрибут первого элемента

0 голосов
/ 05 февраля 2012

Вам придется изменить свой код на:

arrayMe[index] = [$(".cheers").attr('data-fname'), $(".cheers").attr('data-lname')];
0 голосов
/ 05 февраля 2012

Из того, что я вижу, вы добавляете значения не в массив, а в строку, которая хранится в arrayMe [index].

Попробуйте использовать при сохранении в массиве, чтобы добиться того, что, я полагаю, вы хотите:

var arrayMe = [];
$(".cheers").each(function(index){
    arrayMe[index][0] = $(".cheers").attr('data-fname');
    arrayMe[index][1] = $(".cheers").attr('data-lname');
});
...