Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вопрос по each() и перебору строк таблицы (https://javascript.ru/forum/jquery/25531-vopros-po-each-i-pereboru-strok-tablicy.html)

battrack 08.02.2012 11:00

Вопрос по each() и перебору строк таблицы
 
В данный момент занимаюсь изучением jQuery сразу по двум книгам и информации из инета. В одной книге застрял на одном примере.
Вопрос чисто по синтаксису (по крайней мере я так думаю).
Рассматривается пример сортировки таблицы при клике на заголовок столбца.
Есть таблица <table class="sortable">
в которой строками являются книги (столбцы: заголовок, автор, издание, цена).таблица разделена на <thead> и <tbody>
Клик по ячейке <th class="sort-alpha">title</th> вызывает функцию сортировки строк данной таблицы по названию.
Ниже привожу код.


$(document).ready(function() {
$('table.sortable').each(function() {
var $table = $(this);
$('th', $table).each(function(column) {
var $header = $(this);
if ($header.is('.sort-alpha')) {
$header.addClass('clickable').hover(function() {
$header.addClass('hover');
}, function() {
$header.removeClass('hover');
}).click(function() {
var rows = $table.find('tbody > tr').get();
rows.sort(function(a, b) {
var keyA = $(a).children('td').eq(column).text()
.toUpperCase();
var keyB = $(b).children('td').eq(column).text()
.toUpperCase();
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
$.each(rows, function(index, row) {
$table.children('tbody').append(row);
});
});
}
});
});
});

Вопрос по конкретной части кода (весь код чтобы мне понять - до этого еще далеко). Пока вопрос лишь по 4-ой строке:

$('th', $table).each(function(column) { - что это за синтаксис такой?
$('th', $table) - ???? если мы хотим перебрать все колонки почему не записываем таким образом: $($table th) ??

Также не понятно применение each к таблице в целом (2-я строка кода). Что мы этим each-ем перебираем? Таблица то одна.

(на всякий случай поясню что алгоритм сортировки не идеальный. просто в книге он рассматривается как первый шаг, который в дальнейшем улучшается в следующих примерах)

bret 09.02.2012 14:30

Пользуйте кнопку JS

http://api.jquery.com/jQuery/ - это по поводу контекста

each-ем перебираем все th в контексте данной таблицы
Если бы в качестве $table у вас был селектор - то вы могли бы воспользоваться этим $($table+' th')


Часовой пояс GMT +3, время: 11:01.