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

Это последняя часть этого проекта, спасибо всем, кто помог с исправлением синтаксиса в других частях. Я использую плагин 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>

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

1 Ответ

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

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

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

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

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

$("#myTable THEAD TR:first TH").each(function(column) {
    if ($(this).hasClass("DataTypeDate")) {
        // ...
    }
});
...