使用 jQuery 设计表格行交替块的更有效方法?

发布于 2024-07-13 04:04:25 字数 1162 浏览 13 评论 0原文

使用 jQuery 进行奇/偶样式设置非常简单:

$(function() {
  $(".oddeven tbody tr:odd").addClass("odd");
  $(".oddeven tbody tr:even").addClass("even");
});

今天我遇到了一个有趣的问题。 如果您想要设置交替元素的样式,该怎么办? 例如,交替的 3 块。普通的可以这样完成:

$(function() {
  $(".oddeven3 tbody tr:nth-child(3n+1)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+2)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+3)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+4)").addClass("even");
  $(".oddeven3 tbody tr:nth-child(3n+5)").addClass("even");
  $(".oddeven3 tbody tr:nth-child(3n+6)").addClass("even");
});

不过看起来有点啰嗦。 现在它可以稍微简化并变得通用,如下所示:

function oddEvenGroupStyle(groupSize) {
  for (var i=1; i<=groupSize; i++) {
    $(".oddeven" + groupSize + " tbody tr:nth-child(" + groupSize + "n+" + i + ")").addClass("odd");
    $(".oddeven" + groupSize + " tbody tr:nth-child(" + groupSize + "n+" + (groupSize+i) " + ")").addClass("even");
  }
}

并且:

$(function() {
  oddEvenGroupStyle(3);
});

对我来说似乎有点黑客。 是否有一些更类似 jQuery 的方法来选择正确的行?

Doing odd/even styling with jQuery is pretty easy:

$(function() {
  $(".oddeven tbody tr:odd").addClass("odd");
  $(".oddeven tbody tr:even").addClass("even");
});

Now I came across an interesitng problem today. What if you want to style alternating groups of elements? For example, alternating blocks of 3. Longhand this can be done this way:

$(function() {
  $(".oddeven3 tbody tr:nth-child(3n+1)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+2)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+3)").addClass("odd");
  $(".oddeven3 tbody tr:nth-child(3n+4)").addClass("even");
  $(".oddeven3 tbody tr:nth-child(3n+5)").addClass("even");
  $(".oddeven3 tbody tr:nth-child(3n+6)").addClass("even");
});

Seems a bit longwinded though. Now it can be somewhat simplified and made generic like this:

function oddEvenGroupStyle(groupSize) {
  for (var i=1; i<=groupSize; i++) {
    $(".oddeven" + groupSize + " tbody tr:nth-child(" + groupSize + "n+" + i + ")").addClass("odd");
    $(".oddeven" + groupSize + " tbody tr:nth-child(" + groupSize + "n+" + (groupSize+i) " + ")").addClass("even");
  }
}

and:

$(function() {
  oddEvenGroupStyle(3);
});

Seems like a bit of a hack to me though. Is there some more jQuery-ish way of selecting the right rows?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谷夏 2024-07-20 04:04:25
function oddEvenGroupStyle(groupSize) {
    var even = false;
    $('tr').each( 
        function(i){ 
            if(!(i % groupSize)) even = !even;
            $(this).attr('class', (even ? 'groupEven':'groupOdd') ); 
    })
}
function oddEvenGroupStyle(groupSize) {
    var even = false;
    $('tr').each( 
        function(i){ 
            if(!(i % groupSize)) even = !even;
            $(this).attr('class', (even ? 'groupEven':'groupOdd') ); 
    })
}
赢得她心 2024-07-20 04:04:25

cletus,如果你想完成 101% jQuery 风格的工作,请考虑:

  1. 使用 each 而不是经典的 for 循环
  2. 扩展 jQuery 选择器行为? (只是一个提示)

cletus, if you'd like to get the job done 101% jQuery-ish consider:

  1. using each instead of classic for loop
  2. extending jQuery selector behaviour? (just a hint)
榕城若虚 2024-07-20 04:04:25

我会向组中的第一个 TR 添加一个类:

<tr class="group"><td>Group 1</td></tr>
<tr class="grouppart"><td>Part of group 1</td></tr>
<tr class="grouppart"><td>Part of group 1</td></tr>
<tr class="group"><td>Group 2</td></tr>
...

这样您就可以随时更改组的大小,而无需对 javascript 进行任何修改。

// Format the groups:
$("tr.group:even").addClass("even");
$("tr.group:odd").addClass("odd");

// Then apply to groupparts:
$("tr.grouppart").each(function(){
    var oGroup = $(this).prevAll("tr.group:first");
    if(oGroup.hasClass("even")){$(this).addClass("even");}
    if(oGroup.hasClass("odd")){$(this).addClass("odd");}
});

注:这是我凭记忆写的,所以可能有一些小错误。 如果是这种情况,请发表评论,我会修复它。

I would add a class to the first TR in a group:

<tr class="group"><td>Group 1</td></tr>
<tr class="grouppart"><td>Part of group 1</td></tr>
<tr class="grouppart"><td>Part of group 1</td></tr>
<tr class="group"><td>Group 2</td></tr>
...

This way you can change the size of groups as you go without any modification to your javascript.

// Format the groups:
$("tr.group:even").addClass("even");
$("tr.group:odd").addClass("odd");

// Then apply to groupparts:
$("tr.grouppart").each(function(){
    var oGroup = $(this).prevAll("tr.group:first");
    if(oGroup.hasClass("even")){$(this).addClass("even");}
    if(oGroup.hasClass("odd")){$(this).addClass("odd");}
});

Note: I wrote this from memory, so there might be some small glitches in there. Please comment if that's the case and I'll fix it.

吾家有女初长成 2024-07-20 04:04:25

1) 为什么有一个奇数 AND 和一个偶数类,如果你有一个默认样式,然后有一个压倒一切的奇数,它可能会更快

2) 你不能渲染出已经应用样式的 html 吗? 说明您是在 PHP 还是 ASP.net 中执行此操作。 事后执行会比较慢,尤其是当您有很多行时。

1) why have a odd AND and a even class, if you have a default style and then have a overriding odd it will probably be quicker

2) can't you render out the html with the styling already applied? say if your doing this in PHP or ASP.net. doing it after the fact is slower, especially if you have a lot of rows.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文