Добавление парсера сортировщика на основе выборки данных из столбца ячейки

Это последняя часть этого проекта, спасибо всем, кто помог с исправлением синтаксиса в других частях. Я использую плагин tablesorter для jQuery. По сути, я хочу, чтобы моя пользовательская функция сортировки выбирала заголовок таблицы в зависимости от того, имеет ли он класс, а именно «SortableHeader». Затем он должен решить, какой анализатор метаданных добавить в заголовок этого конкретного столбца на основе данных в этом столбце. Я выбрал более сложный подход и решил взять образец данных из одной ячейки (скажем, из первой строки столбца) и сравнить его с различными шаблонами или регулярными выражениями, затем сортировщик добавит правильный анализатор метаданных. на основе результата сравнения, т.е. если он соответствует шаблону даты, сортировщик добавит анализатор даты, если он соответствует шаблону URL, он добавит анализатор URL и т. д. У меня есть две проблемы:

  1. Я не могу понять, как выбрать одну строку из столбца, я пытался искать, но я нашел только учебные пособия для обхода всех строк в таблице, а не для выбора одной строки из столбца на основе заголовка столбца. Информация.

  2. Я не знаю, как создавать шаблоны и/или регулярные выражения в jQuery. например Как регулярное выражение/шаблон даты, которое ищет даты в форме 2 марта 2009 года, будет выглядеть в jQuery??

В настоящее время у меня есть следующий план

    //Add parser to each table header that has a class="SortableHeader"
    $("th[class='SortableHeader']").each(function(column){
        //Take a sample of data from a single cell in this column 
        // compare it to various patterns to determine what type 
       //of data it contains in order to apply the appropriate parser   
    });

Примерный раздел заголовка для выполнения поиска по сортировке:

<table id="myTable" summary="Table is used to list available workshops"  cellspacing="0">
            <thead>
                <tr>
                    <th class="SortableHeader"><a rel = "Header" href="#" title="Sort title in decending order" class="">Title</a></th>
                    <th><a rel = "Header" href="#" title="Sort instructor in descending order" class="">Instructor</a></th>
                    <th class="SortableHeader"><a rel = "Header" href="#" title="Sort column in decending order" class="">Date</a></th>
                    <th>Start/End</th>
                    <th><a rel = "Header" href="#" title="Sort column in decending order" class="">Seats Available</a></th>
                    <th><a rel = "Header" href="#" title="Sort column in decending order" class="">Enrolled</a></th>
                    <th><a rel = "Header" href="#" title="Sort column in decending order" class="">Pre-Requisites</a></th>
                    <th>Workshop Actions</th>
                </tr>
            </thead>

Последний вопрос, который у меня есть, может ли быть гораздо более простой способ сделать это?? Я полагаю, что мог бы просто взять заголовок из заголовка и основывать на нем селектор синтаксического анализатора, но я хотел избежать этого, поскольку он кажется немного менее гибким, мне пришлось бы жестко кодировать определенные строки, чтобы проверить заголовок заголовок против, и любой, кто реализует это, сможет использовать только эти конкретные строки в качестве заголовка своего заголовка, чтобы применить определенные синтаксические анализаторы сортировки. Я хочу избежать этого, если смогу.


person kingrichard2005    schedule 12.05.2009    source источник


Ответы (1)


  1. Используйте селектор, который возвращает столбцы в первой строке, а затем выберите из него нужный столбец.

    var firstColumn = $("#myTable TBODY TR:first TD")[0];

  2. Я бы попытался принудить значение для дат и числовых типов, а затем вы можете перейти к подтипам и сопоставлению регулярных выражений, когда вы просматриваете различные варианты типа строки (URL-адреса и т. д.)

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

    ‹ th class="SortableHeader DataTypeDate">...‹ /th> ‹ th class="SortableHeader DataTypeURL">...‹ /th>

Когда вы инициализируете сортировку, вы можете использовать метод hasClass, чтобы увидеть, имеет ли столбец определенный тип даты, связанный с ним.

$("#myTable THEAD TR:first TH").each(function(column) {
    if ($(this).hasClass("DataTypeDate")) {
        // ...
    }
});
person great_llama    schedule 13.05.2009
comment
Спасибо great_llama, мой босс наконец сообщил мне, что этого подхода будет достаточно. Я начну его кодировать и посмотреть, что получится, еще раз спасибо. - person kingrichard2005; 14.05.2009