Как использовать каждый из массива? - PullRequest
2 голосов
/ 25 января 2012

Я использую это: http://datatables.net/release-datatables/examples/api/select_row.html

Вот функция, возвращающая выбранные строки:

function fnGetSelected( oTableLocal )
{
    var aReturn = new Array();
    var aTrs = oTableLocal.fnGetNodes();

    for ( var i=0 ; i<aTrs.length ; i++ )
    {
        if ( $(aTrs[i]).hasClass('row_selected') )
        {
            aReturn.push( aTrs[i] );
        }
    }
    return aReturn;
}

я делаю:

var arr = fnGetSelected(oTable);

это верни мне:

[tr.gradeA, tr.gradeA, tr.gradeA]

это:

<tr class="gradeA even row_selected">
<td class=" sorting_1"><span class="my_values" test="aaa">Gecko</span></td>
<td>Camino 1.5</td>
<td>OSX.3+</td>
<td class="center">1.8</td>
<td class="center">A</td>
</tr>
<tr class="gradeA odd row_selected">
<td class=" sorting_1"><span class="my_values" test="bbb">Gecko</span></td>
<td>Netscape 7.2</td>
<td>Win 95+ / Mac OS 8.6-9.2</td>
<td class="center">1.7</td>
<td class="center">A</td>
</tr>
<tr class="gradeA even">
<td class=" sorting_1"><span class="my_values" test="bbb">Gecko</span></td>
<td>Netscape Browser 8</td>
<td>Win 98SE+</td>
<td class="center">1.7</td>
<td class="center">A</td>
</tr>

Я добавляю для этого собственный span.my_values ​​с атрибутом test . Теперь я хотел бы получить все атрибуты test для этого.

Я пытаюсь:

    arr.each(function(index) {
        console.log($(this).children());
    });

но эта ошибка возврата: arr.each не является функцией

Как мне это сделать?

Ответы [ 5 ]

3 голосов
/ 25 января 2012

Функция зацикливания универсального массива jQuery: $.each, не является членом Array.prototype, поэтому:

$.each(arr, function() {
    console.log($(this).children());
});

Теперь я хотел бы получить все атрибуты для этого теста.

Если вы хотите получить test атрибут span с классом "my_values" внутри элементов в arr, вы можете использовать $.map:

var testValues = $.map(arr, function() {
    return $(this).find('span.my_values[test]').attr('test');
});

... который дает вам массив значений test.


Примечание 1: Поскольку вы используете jQuery, который по своей сути основан на множествах, вместо того, чтобы ваша fnGetSelected функция возвращала Array соответствующих элементов, как насчет того, чтобы она возвращала объект jQuery?

function fnGetSelected( oTableLocal )
{
    return $(oTableLocal.fnGetNodes()).filter('.row_selected');
}

Это создает объект jQuery, содержащий все возвращенные узлы, затем фильтрует его только по тем, которые имеют класс "row_selected" (как ваш оригинал), и возвращает его.

Тогда вы можете использовать это так:

var rows = fnGetSelected(oTableLocal);
rows.each(function() {
    console.log($(this).children());
});

var testValues = rows.map(function() {
    return $(this).find('span.my_values[test]').attr('test');
}).get();

Примечание 2: «test» - недопустимый атрибут для элементов span, хотя браузеры допускают это. Взгляните на использование data-* атрибутов вместо этого, например, «data-test» вместо «test».

2 голосов
/ 25 января 2012

Вы пробовали:

 $.each(arr, function(index) {
    console.log($(this).children());
});

или:

 $(arr).each(function(index) {
    console.log($(this).children());
});
1 голос
/ 25 января 2012

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

    $(arr).each(function(index) {
        console.log($(this).children());
    });
1 голос
/ 25 января 2012

arr это массив.Вы должны сделать

$.each(arr,function(index,value) {
  console.log(value);
})

, вы можете преобразовать arr в объект jQuery и использовать arr.each (), изменив вашу функцию:

function fnGetSelected( oTableLocal )
{
    var aReturn = $([]);
    var aTrs = oTableLocal.fnGetNodes();

    for ( var i=0 ; i<aTrs.length ; i++ )
    {
        if ( $(aTrs[i]).hasClass('row_selected') )
        {
            aReturn.pushStack( aTrs[i] );
        }
    }
    return aReturn;
}
1 голос
/ 25 января 2012

Метод each () применяется только к объектам jQuery, а не к массивам. $. Each () , однако, поддерживает массивы, поэтому вы можете использовать его вместо:

$.each(arr, function() {
    console.log($(this).children());
});
...