这是一个正在进行的项目,我刚刚完成了。我一直在开发一个基于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'}");
});
});
答案 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工作的宝贵见解,它确实是一个宏伟的图书馆。