为什么这个函数没有替换类

时间:2009-05-14 20:43:26

标签: jquery

我有一个我正在测试的函数,应该检查所有表头是否有特定的类,删除它并用另一个类替换它。我正在使用它来切换tablesorter插件的元数据解析器。我到目前为止的代码如下:

$(function(){
    $("th").each(function(){
        if ($(this).hasClass("{sorter: 'usLongDate'}")) { 
            $(this).removeClass("{sorter: 'usLongDate'}").addClass("{sorter: 'false'}");
            }       
    });
});

$(function() {
    $("table").tablesorter({}); 
});

我正在尝试将以下标头中的类解析器切换到false内联解析器。

<th class="{sorter: 'usLongDate'}"><a rel = "Header" href="#" title="Sort column in decending order" class="">Date</a></th>

当然这不是我唯一的标题,我只是在这个测试它,我假设其余的标题不应该受到影响,tablesorter仍然应该对它们进行排序。但是当我运行html文件时,没有任何作用。有什么我想念的吗?感谢。

注意:为了避免混淆,jQuery的tablesorter插件可以在表头的class属性中使用内联解析器,以确定列的排序方式和/或方式。

更新:试过文森特罗伯特的建议,遗憾的是它不起作用。关于addClass和removeClass是否可以处理这些。我有一个原始函数,能够将禁用解析器添加到所有类,

$("th[class='']").addClass("{sorter: 'false'}");

这来自Paolo Bergantino,效果很好。我只想尝试扩展它。

4 个答案:

答案 0 :(得分:2)

如果我错了,请纠正我。但class =“{sorter:'usLongDate'}”不是有效的类名。类是由空格分隔的名称。 class =“class1 class2”表示该元素有两个类class1和class2而不是一个类。有效的类名称解释为here

修改

如果您希望能够更改类,请使用attr而不是add / remove class

$(this).attr('class', 'myNewClass'); 

并删除使用:

$(this).removeAttr('class');

答案 1 :(得分:2)

我认为addClass()或removeClass()不能处理这类“类”。你应该直接访问“class”属性。

现在我不熟悉这个插件......

$(function(){
    $("th").each(function(){
        if ($(this).attr("class") == "{sorter: 'usLongDate'}") { 
                $(this).attr("class", "{sorter: 'false'}");
            }           
    });
});

修改

只是浏览了文档,您可以使用选项方式而不是类方式:

$('table').tablesorter({ 
    headers: $('th').map(function(i)
    { 
        return { sorter: false /* or whatever you want based on $(this) content */ }; 
    }) 
});

只要您在任何tablesorter()调用之前调用它,它就应该工作。

答案 2 :(得分:0)

你应该打电话吗

$("table").tablesorter({});

在尝试查看课程之前?我假设它是插入这些类名的插件?

答案 3 :(得分:0)

这可能就是你要找的东西。

$(document).ready(function() { 
    $("th[class*='usLongDate']").each(function(){
        $(this).removeClass("{sorter: 'usLongDate'}").addClass("{sorter: false}");
    });
    $("table").tablesorter(); 
}); 

问题可能源于类用空格分隔的事实。从技术上讲,“{sorter:”和“'usLongDate'}”是两个不同的类。我不知道TableSorter究竟是如何处理它们的,但是删除“{sorter:”然后再添加它应该将它保持在“false}”旁边。