2010-09-25 73 views
2

我正在使用jquery ui sortable。当行重新排列时,我想将行颜色重置为斑马条纹。这是我正在使用的代码。如何让jquery在执行另一个更新行颜色之前等待一个函数完成?

function reset_rows() { 
$("#rank tbody tr").removeClass("row1","row2"); 
$("#rank tbody tr:even").addClass("row1"); 
} 
$("#rank tbody").sortable({ 
update : function() { 
    reset_rows(); 
} 
}); 

该函数添加正确的行颜色,然后立即删除它们。我怎样才能让jquery先删除行类,然后将row1类加回到偶数行?它首先添加row1类,而不管我在代码中使用函数的顺序。

回答

0

尝试使用此语法

$('rank tbody tr:even').addClass(function() { 
      $("#rank tbody tr").removeClass("row1","row2"); 
      return "row1"; 
     }); 
+0

请记住,您传递给'addClass()'的函数正在每个'tr:even'上调用。所以如果有20个,你从DOM中选择* all *'#rank tbody tr“并调用'.removeClass()'20次,每次删除你返回的前一个'row1'。所以只有最后一个仍然有'row1'类,因为其他人已经被删除了几次。另外,你不会正确调用'.removeClass()'。它应该是'.removeClass('one two')'。 – user113716 2010-09-25 16:29:59

1

我不知道是否有什么东西了你的CSS或一些这样的,因为基本上应该工作。我想我会做到这一点略有不同,但:

$('tbody').sortable({ 
    update: function() { 
    $('tr:odd').removeClass("even").addClass("odd"); 
    $('tr:even').removeClass("odd").addClass("even"); 
    } 
}); 

(当然你要包含那些选择了一下,我只是做了我的例子网页上的所有。)

Live example

你并不是真的需要两个类(如果我误读了这个,而你实际上并没有使用两个类),你可以将一个类应用到(比如说)偶数行,这使得它更简单:

$('tbody').sortable({ 
    update: function() { 
    $('tr:odd').removeClass("even"); 
    $('tr:even').addClass("even"); 
    } 
}); 

Live example


题外话,但我假设你使用JavaScript和类这样做,因为你必须支持的浏览器不能用CSS的nth-child伪类这样的直接做到这一点...(可悲的是,IE6仍然是人生的现实,不是吗? :-))

相关问题