如何让jquery在执行另一个函数更新行颜色之前等待一个函数完成?

如何让jquery在执行另一个函数更新行颜色之前等待一个函数完成?,jquery,Jquery,我正在使用jQueryUISortable。重新排列行时,我希望将行颜色重置为斑马条纹。这是我正在使用的代码 function reset_rows() { $("#rank tbody tr").removeClass("row1","row2"); $("#rank tbody tr:even").addClass("row1"); } $("#rank tbody").sortable({ update : function() { reset_rows(); } }); 该

我正在使用jQueryUISortable。重新排列行时,我希望将行颜色重置为斑马条纹。这是我正在使用的代码

function reset_rows() {
 $("#rank tbody tr").removeClass("row1","row2");
 $("#rank tbody tr:even").addClass("row1");
}
$("#rank tbody").sortable({
 update : function() {
  reset_rows();
 }
});
该函数添加正确的行颜色,然后立即删除所有行颜色。如何让jquery先删除行类,然后再将行1类添加回偶数行?无论我在代码中使用函数的顺序如何,它都会首先添加row1类。

尝试使用此语法

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

我想知道你的CSS或类似的东西是否有问题,因为基本上这应该是可行的。不过,我想我会稍微改变一下:

$('tbody').sortable({
  update: function() {
    $('tr:odd').removeClass("even").addClass("odd");
    $('tr:even').removeClass("odd").addClass("even");
  }
});
(显然,您需要包含一些选择器,我刚刚在示例页面上完成了所有操作。)

您实际上不需要两个类(如果我误读了这篇文章,很抱歉您没有实际使用两个类),您可以将一个类应用于(比如)偶数行,这使它更简单:

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



离题,但我假设您是在使用JavaScript和类来实现这一点,因为您必须支持不能直接使用CSS的
nth child
pseudo类等来实现这一点的浏览器。。。(遗憾的是,IE6仍然是生活的现实,不是吗?:-)

请记住,传递给
addClass()
的函数在每个
tr:even
上都被调用。因此,如果有20个,那么您将从DOM中选择所有
“#rank tbody tr”
,并调用
.removeClass()
20次,每次都删除您返回的任何先前的
行1
。因此,只有最后一个类仍将保留其
row1
类,因为其他类已被多次删除。另外,您没有正确调用
.removeClass()
。它应该是
.removeClass('一两')