【问题标题】:Zebra striping after jQuery remove()jQuery remove() 之后的斑马条纹
【发布时间】:2013-03-30 05:41:07
【问题描述】:

我使用 jQuery 对表格进行斑马条纹处理,因为它适用于 ie8。

$('table.data tr:nth-child(odd)').css('background-color', '#ececec');

问题是,我有一个按钮可以让你删除一行。

$(this).parents('tr').remove();

这会消除斑马条纹。所以我试过了:

$(this).parents('tr').remove();
$('table.data tr:nth-child(odd)').css('background-color', '#ececec');
$('table.data tr:nth-child(even)').css('background-color', '#ffffff');

$(this).parents('tr').remove();
$('table.data tr').css('background-color', '#ffffff');
$('table.data tr:nth-child(odd)').css('background-color', '#ececec');

两者都不起作用。 .remove() 没有回调函数,否则我会将斑马条纹放入其中。有什么想法吗?

编辑 - 上面的代码有效,但存在 css 冲突。 (见下面的答案)。然而,冲突并没有设置背景颜色。所以,我还是想知道为什么这条规则会导致冲突。

【问题讨论】:

  • 你的第一个例子对我有用:Full Screen + Code
  • 为什么不干脆:$('table.data tr:odd').css('background-color', '#ececec'); $('table.data tr:even').css('background-color', '#ffffff');删除第n个孩子?
  • 这实际上解决了我在下面的回答中所说的问题......谢谢!我最终选择了我所做的选择器的原因是因为在使用 IE8 进行测试期间,我尝试的一些选择器不起作用,我最终选择了那个。

标签: jquery


【解决方案1】:

.remove 不需要回调,因为它是同步的。我建议从 .css 移开并使用一个类,这样您就可以简单地删除该类,然后将其添加回奇数行。

进行初始条带化:

$('table.data tr:nth-child(odd)').addClass('odd');

然后删除:

$(this).parents('tr').remove();
$('table.data tr').removeClass('odd').filter(':nth-child(odd)').addClass('odd');

【讨论】:

  • 原版为什么会失败?
  • @JanDvorak 我的猜测是 css 冲突,但如果没有 html/css,我无法确认。他的原始代码将适用于正确的 html/css。我想这确实应该是一个注释,但是这里有相当多的代码,它作为注释的可读性不是很好。
  • 我不知道...很抱歉给大家添麻烦了。我没有任何 css 冲突,我必须继续排查问题。
【解决方案2】:

如果您的目标是相当现代的浏览器(IE 9+),您可以使用 CSS3 样式表来处理所有这些问题。

style.css:

table.data tr:nth-child(odd)
{
    background-color: #ececec;
}
table.data tr:nth-child(even)
{
    background-color: #ffffff;
}

不需要javascript;这些规则由浏览器应用,并在 DOM 更改时自动重新应用。

【讨论】:

  • “我使用 jQuery 对我的表格进行斑马条纹处理,因为它适用于 ie8。” 虽然我同意,但应该使用 CSS3,并且只针对不支持的浏览器降级为 js支持它。
  • @KevinB 呵呵,是的,也许我应该阅读问题的第一行。不过,这可能对其他提出这个问题的人有用。
  • @KevinB 如果您已经将 js 包含到斑马条纹中,为什么还要浪费额外的 css 行来做同样的事情?
  • @inorganik 这也可以反过来。如果您已经将 css 包含到斑马条纹中,为什么还要浪费额外的 js 行来做同样的事情? (提示:您可以将 IE8 的 css/js 包含在条件 cmets 中)
  • 基本上,既然可以在不影响现代浏览器的情况下添加对旧版浏览器的支持,为什么现代浏览器还要忍受添加对旧版浏览器的支持。
【解决方案3】:

找到问题了。

我的问题中的代码有效,但存在 css 冲突。奇怪的是,导致冲突的 css 规则没有设置background-color

table.headerShadow tr:nth-child(2) {
    background-image:url(../_images/faux-shadow.png);
    background-repeat:repeat-x;
}

删除规则可以解决问题。奇怪,嗯?为什么该规则会导致冲突?

这里有一个小提琴来演示:http://jsfiddle.net/W7yZC/2/

【讨论】:

  • 我不太明白为什么会导致这个问题,但是,它相对容易修复。将一个 thead 和 tbody 添加到您的表中,并将该 css 规则定位在 thead 上。 jsfiddle.net/W7yZC/4 在这一点上将 js 仅针对 tbody 也是有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多