Добавление анализатора метаданных в заголовок таблицы - PullRequest
0 голосов
/ 20 мая 2009

это текущий проект, и я почти закончил. Я разрабатывал пользовательский сортировщик таблиц на основе плагина tablesorter для jQueryt. К счастью, все готово. Мой последний вопрос: у меня есть заголовок таблицы следующим образом:

<th class="blue_bg"><a rel = "Header" href="#" title="Sort column in decending order" class="">Seats Available</a></th>

Я хотел бы добавить встроенный анализатор метаданных для отключения сортировки в определенном столбце. В настоящее время у меня есть функция обхода, которая проходит через каждый заголовок без класса и добавляет синтаксический анализатор следующим образом:

    //th without a class automatically get sorting disabled
    $("th[class='']").each(function(){
    $(this).addClass("{sorter: false}");
});

У меня также есть один, который просматривает и ищет определенную строку, которая указывает, должен ли столбец быть отключен от сортировки:

    //Add disabling parser to each header with a disable class
    $("th[class*='csuci.sortable.false']").each(function(){
    $(this).removeClass("csuci.sortable.false").addClass("{sorter: false}");
});

По сути, я хочу настроить его так, чтобы, если пользователь не укажет иное, по умолчанию или по заданной пользователем строке, в столбце сортировка была отключена. Напомним, что у меня отключена сортировка для столбцов, у которых вообще нет класса, и которые имеют класс, определяющий строку отключения. Мне также хотелось бы иметь третье условие, когда у пользователя может быть любой другой класс в заголовке, в этом примере пользователь указывает класс, чтобы сделать фон столбца синим. Но я не уверен, какой синтаксис мне нужен, чтобы добавить парсер отключения к заголовку этого примера. Помощь приветствуется, спасибо заранее.

ОБНОВЛЕНИЕ: Вот моя полная функция, которая добавляет парсеры, основанные на том, находится или нет атрибут класса th:

$(function(){
    //Add disabling parser to each header with a disable class
    $("th[class*='csuci.sortable.false']").each(function(){
        $(this).removeClass("csuci.sortable.false").addClass("{sorter: false}");
    });

    //th without a class automatically get sorting disabled
    $("th[class='']").each(function(){
        $(this).addClass("{sorter: false}");
    });

    //Add parser to each table that has a class="csuci.sortable."
    $("th[class*='csuci.sortable.date']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'usLongDate'}");
    });

    $("th[class*='csuci.sortable.percent']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'percent'}");
    });

    $("th[class*='csuci.sortable.ip']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'ip-address'}");
    });

    $("th[class*='csuci.sortable.url']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'url'}");
    });

    $("th[class*='csuci.sortable.money']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'currency'}");
    });

    $("th[class*='csuci.sortable.time']").each(function(){
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'time'}");
    });
});

Ответы [ 2 ]

1 голос
/ 20 мая 2009

Так в каких случаях вы хотите включить сортировщик? Похоже, единственный случай, когда сортировщик включен, - это прямой истинный флаг. Возможно, вам просто нужно использовать , а не .

$("th:not([class*='csuci.sortable.true'])").each(function(){
    $(this).addClass("{sorter: false}");
});

Если сортировка включена только по истинному флагу, и вам нужно установить сортировщик для всех элементов, тогда вы можете сопоставить все столбцы и использовать условное выражение для установки флага.

$("th").each(function(){
    var sortEnabled = $this.hasClass('csuci.sortable.true');
    $(this).addClass("{sorter: "+sortEnabled+"}");
});
0 голосов
/ 21 мая 2009

Мне удалось найти способ обойти это, я просто добавляю функцию обхода, которая добавляет анализатор отключения к каждому заголовку таблицы, затем каждый последующий обход удаляет анализатор отключения, проверяет жестко запрограммированную строку и добавляет необходимый парсер:

$(function(){

    //Add disable parser to all headers
    $("th").each(function(){
        $(this).addClass("{sorter: false}");
    });

    //Add disable parser to each header with a disable class
    $("th[class*='csuci.sortable.false']").each(function(){
        $(this).removeClass("csuci.sortable.false").addClass("{sorter: false}");
    });

    //th without a class automatically gets sorting disabled
    $("th[class='']").each(function(){
        $(this).addClass("{sorter: false}");
    });

    //Add parser to each table that has a class="csuci.sortable.date"
    $("th[class*='csuci.sortable.date']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.date").addClass("{sorter: 'usLongDate'}");
    });
    //Add parser to each table that has a class="csuci.sortable.percent"
    $("th[class*='csuci.sortable.percent']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.percent").addClass("{sorter: 'percent'}");
    });
    //Add parser to each table that has a class="csuci.sortable.ip"
    $("th[class*='csuci.sortable.ip']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.ip").addClass("{sorter: 'ip-address'}");
    });
    //Add parser to each table that has a class="csuci.sortable.url"
    $("th[class*='csuci.sortable.url']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.url").addClass("{sorter: 'url'}");
    });
    //Add parser to each table that has a class="csuci.sortable.money"
    $("th[class*='csuci.sortable.money']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.money").addClass("{sorter: 'currency'}");
    });
    //Add parser to each table that has a class="csuci.sortable.time"
    $("th[class*='csuci.sortable.time']").each(function(){
        $(this).removeClass("{sorter: false}");
        $(this).removeClass("csuci.sortable.time").addClass("{sorter: 'time'}");
    });
});

Вероятно, не самый чистый способ сделать, но это работает. Спасибо всем здесь, в StackOverflow, которые предоставили мне бесценное понимание работы jQuery, это действительно великолепная библиотека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...