1. Mój błąd. Rzeczywiście v nie ma przed pętlą. :-). Co więcej masz obj który robi to o czym pisałem. Jest ok.
2. To jest tylko konwencja nazewnicza używana w niektórych kręgach jQuerowców :-). Dzięki $ na początku nazwy zmiennej wiadomo od razu, że to obiekt jQuery i możemy wykonywać na nim wszystkie operacje typowe dla jQuery. A zmienną się wprowadza po to aby ograniczyć użycie $() bo to bardzo czasochłonna funkcja.
Zamiast
$('.counter').cos();
$('.counter').cos2();
$('.counter').cos3();
bardzo często można spotkać:
$counter = $('.counter');
i potem:
$counter.cos();
$counter.cos2();
$counter.cos3();
Jeżeli później w kodzie ktoś zobaczy $counter to nie zastanawia się czy to integer, jakiś iterator, czy coś innego, bo widać od razu, że to obiekt jQuery. U Ciebie jest zastosowana inna sztuczka tj. za każdym razem używasz funkcji $(), ale jest to rozwiązanie moim zdaniem nieeleganckie.
var column = $(table).find('thead th:eq(' +col+ ')');
var sortBy = $(column).attr('data-sort') || 'length';
można byłoby wymienić na:
var column = $(table).find('thead th:eq(' +col+ ')');
var sortBy = column.attr('data-sort') || 'length';
lub wg. konwencji nazewniczej, o której piszę:
var $column = $(table).find('thead th:eq(' +col+ ')');
var sortBy = $column.attr('data-sort') || 'length';