切换行颜色

时间:2010-04-16 15:02:08

标签: jquery

我在页脚中有一个表格单元格,允许用户打开行着色:

$('#highlight').click(function() {
$(this).parents('table').RowColors();
})

// From Chapter 7 of Learning jQuery
$.fn.RowColors = function() {
$('tbody tr:odd', this).removeClass('even').addClass('odd');
$('tbody tr:even', this).removeClass('odd').addClass('even');
return this;
};

问:如何编写一个选择器:如果至少有一行class =“even”,则删除“even”和“odd”ELSE执行RowColors函数。

3 个答案:

答案 0 :(得分:5)

我的建议是略有不同。只有一个类的默认状态是另一个。所以:

tr td { background: yellow; }
tr.odd td { background: blue; }

然后就这么简单:

$("tr").toggleClass("odd");

或更具体地说:

$("tbody > tr").removeClass("odd").filter(":nth-child(odd)").addClass("odd");

注意:避免使用:odd:even。它们通常并不代表您认为的含义。 :nth-child(odd):nth-child(even)往往是你真正的意思。

我可能会写一些类似的东西:

$("#highlight").click(function() {
  $(this).closest("table").children("tbody").children("tr").removeClass("odd")
    .filter(":nth-child(odd)").addClass("odd");
  return false;
});

如果您愿意,可将其放入单独的功能中。

编辑以检查某些内容是否为空:

var odd = $(".odd");
if (odd.length == 0) {
  // do one thing
} else {
  // do something else
}

jQuery对象支持length属性和size()方法,它们执行相同的操作。

答案 1 :(得分:1)

交替的行颜色可以用纯CSS完成(只要你不需要支持IE6 / 7):

tr { background-color: green; }
tr:nth-child(even) { background-color: red; }

答案 2 :(得分:1)

有一个名为Colorize的jQuery插件已经这样做了。你可以使用它,或查看代码吗?