jQuery Tablesorter на две таблицы

Для моих таблиц у меня есть фиксированный заголовок и прокручиваемые данные. Это достигается за счет использования двух таблиц и переноса данных в div с автоматическим переполнением (это связано с тем, что <tbody> не может иметь прикрепленную к нему прокрутку).

<div class="uiGrid">
    <div class="uiGridHeader">
        <table>
            <colgroup>
                <col style="width:29px;text-align:center" />
                <col />
                <col style="width:100px" />
                <col style="width:100px" />
                <col style="width:150px" />
                <col style="width:46px" />
                <col style="width:62px" />
            </colgroup>
            <thead>
                <tr>
                    <th scope="col"><input type="checkbox" id="checkall" /></th>
                    <th scope="col"><a href="#">Name</a></th>
                    <th scope="col">Post Code</th>
                    <th scope="col"><a href="#">SIC Code</a></th>
                    <th scope="col"><a href="#">&#8470; of Employees</a></th>
                    <th scope="col"></th>
                    <th scope="col"></th>
                </tr>
            </thead>
        </table>
    </div>
    <div class="uiGridContent">
        <table class="sortable">
            <colgroup>
                <col style="width:29px;text-align:center" />
                <col />
                <col style="width:100px" />
                <col style="width:100px" />
                <col style="width:150px" />
                <col style="width:46px" />
                <col style="width:62px" />
            </colgroup>
            <tbody>
                <!-- DATA ROWS GO HERE -->
            </tbody>
        </table>
     </div>

Я хочу использовать что-то вроде подключаемого модуля jQuery TableSorter: http://tablesorter.com/, НО, поскольку у меня есть два таблицы, это не работает... Как мне заставить его работать?

$("table.sortable").tablesorter({
            headers: {
                0: { sorter: false },
                5: { sorter: false },
                6: { sorter: false }
            }
        });

Вместо этого я пытался связать два, используя:

$('table').tablesorter().bind('sortEnd', function ()
        {
            var $cloneTH = $('.uiGridHeader th');
            var $trueTH = $('uiGridContent th');
            $cloneTH.each(function (index) {
                $(this).attr('class', $($trueTH[index]).attr('class'));
            });
        });

        $('.uiGridHeader th').each(function (index) {
            var $cloneTH = $(this);
            var $trueTH = $($('.uiGridContent th')[index]);
            $cloneTH.attr('class', $trueTH.attr('class'));
            $cloneTH.click(function () {
                $trueTH.click();
            });
        });

Но все равно не работает...

РЕДАКТИРОВАТЬ:

Основываясь на ответе ниже, я попытался сделать так, чтобы он обновлял HTML на лету:

var copyThead = $(".uiGridContent thead").html();
    copyThead = '<table><thead>' + copyThead + '</thead></table>';

    $(".uiGridHeader").html(copyThead);
    $(".uiGridContent table").tablesorter();
    $(".uiGridContent table thead").hide();

    $(".uiGridHeader th").click(function () {

        // Get updated HTML
        var FindcopyThead = $(".uiGridContent thead").html();
        var NewcopyThead = '<table><thead>' + FindcopyThead + '</thead></table>';

        $(".uiGridHeader").html(NewcopyThead);

        var index = $(".uiGridHeader th").index(this);
        var sorting = [[index, 0]];
        $(".uiGridContent table").trigger("sorton", [sorting]);
        return false;
    });

Но при клике получаю ошибку: Uncaught TypeError: Cannot set property 'count' of undefined


person Cameron    schedule 10.10.2011    source источник


Ответы (1)


На мой взгляд, вы должны создать НАСТОЯЩУЮ структурированную таблицу (внутри таблицы данных.

Затем я бы использовал jQuery, чтобы скопировать объявление и создать дубликат в #uiGridHeader с содержимым, и скрыть «оригинал», а затем вы можете использовать внешнюю сортировку таблиц, чтобы сделать трюк http://tablesorter.com/docs/example-trigger-sort.html

Возможно ли это как решение? Попробую на скрипке :)

Что-то работает:

http://jsfiddle.net/cARZz/

person Marco Johannesen    schedule 10.10.2011
comment
Ах, проблема :( ОРИГИНАЛЬНЫЙ Th меняет свои классы, а новые - нет, когда пользователь щелкает заголовок. Можно ли сделать так, чтобы эта строка: var copyThead = $(".uiGrid thead").html(); всегда получала последний заголовок, когда что-то меняется в оригинале? - person Cameron; 10.10.2011
comment
Поэтому ему необходимо обновлять HTML при каждом нажатии и изменять его в заголовке. Я использовал .html() вместо добавления, но получаю ошибки. См. мой OP выше для обновленного кода. - person Cameron; 10.10.2011
comment
Еще проще просто переместить thead... $(".uiGridContent thead").appendTo(".uiGridHeader"); - вот демонстрация @Marco обновлена - person Mottie; 11.10.2011
comment
На всякий случай, если все эти усилия направлены на то, чтобы просто сделать липкий заголовок, попробуйте этот виджет липкого заголовка tablesorter, который я сделал — демонстрация - person Mottie; 11.10.2011