将元数据解析器添加到表头

时间:2009-05-20 17:06:26

标签: jquery

这是一个正在进行的项目,我刚刚完成了。我一直在开发一个基于jQueryt的tablesorter插件的自定义表分类器。谢天谢地,它已经完成了。我的最后一个问题是,我有一个表格标题如下:

<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 个答案:

答案 0 :(得分:1)

那么您希望启用分拣机的案例是什么?这听起来像分拣机启用的唯一情况是直接真正的旗帜。您可能只需要使用not

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

如果仅通过true标志启用排序,并且您需要为所有元素设置排序器,那么您可以匹配所有列并使用条件来设置标志。

$("th").each(function(){
    var sortEnabled = $this.hasClass('csuci.sortable.true');
    $(this).addClass("{sorter: "+sortEnabled+"}");
});

答案 1 :(得分:0)

我设法找到解决方法,我只是在开头添加一个遍历函数,将禁用解析器添加到每个表头,然后每个后续遍历删除禁用解析器,检查硬编码字符串并添加必要的解析器:

$(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工作的宝贵见解,它确实是一个宏伟的图书馆。