基于来自单元格列的数据样本添加分拣机解析器

时间:2009-05-12 18:47:29

标签: jquery tablesorter

这是这个项目的最后一部分,感谢所有帮助其他部分进行语法修正的人。我正在使用jQuery的tablesorter插件。基本上,我想要完成的是我的自定义排序功能根据它是否有一个类来选择一个表头,即“SortableHeader”。然后,它必须根据该列中的数据决定将哪个元数据解析器添加到该特定列的标头中。我采用了更复杂的方法并决定从单个单元格(比如列的第一行)中获取数据样本并将其与不同模式或正则表达式进行比较,然后排序器将添加适当的元数据解析器基于比较结果,例如如果它与日期模式匹配,分拣机将添加日期解析器,如果它与URL模式匹配,它会添加URL解析器等。我有两个问题:

  1. 我无法弄清楚如何选择 我是一列中的一行 试着看,但我只找到了 遍历所有行的教程 一张桌子,而不是选择一张桌子 基于列的单行 列标题信息。

  2. 我不知道如何做模式     和/或正则表达式     jQuery的。例如怎么会约会     正则表达式/模式     寻找3月2日表格的日期,     2009年,看看jQuery ??

  3. 我目前有以下大纲

        //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 :(得分:0)

  1. 使用返回第一行中列的选择器,然后从中选择所需的列。

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

  2. 我会尝试强制日期和数字类型的值,然后当你查看各种字符串类型变体(URL等等)时,你可以进入子类型和正则表达式匹配

  3. 如果你想让它更具有比较性,我只想在列标题中添加另一个类,指明你想要在排序中使用的比较器。

    &LT; th class =“SortableHeader DataTypeDate”&gt; ...&lt; /第&GT; &LT; th class =“SortableHeader DataTypeURL”&gt; ...&lt; /第&GT;

  4. 初始化排序时,可以使用hasClass方法查看列是否具有与之关联的特定日期类型。

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