Jquery 过滤块+;向每3个元素添加一个类
我使用的是Chris Coyier编写的代码,但我想在每三个“block”元素中添加一个类“last”(去掉右边空白)。 到目前为止,我有: HTMLJquery 过滤块+;向每3个元素添加一个类,jquery,Jquery,我使用的是Chris Coyier编写的代码,但我想在每三个“block”元素中添加一个类“last”(去掉右边空白)。 到目前为止,我有: HTML <div id="blocks-nav"> <a rel="all" class="current">All</a> <a rel="www">Internet</a> <a rel="ci">Logo</a> </div>
<div id="blocks-nav">
<a rel="all" class="current">All</a>
<a rel="www">Internet</a>
<a rel="ci">Logo</a>
</div>
<div id="blocks-gropup">
<div class="block all www">
<!-- some content -->
</div>
<div class="block all ci">
<!-- some content -->
</div>
<div class="block all www">
<!-- some content -->
</div>
<div class="block all ci">
<!-- some content -->
</div>
<div class="block all ci">
<!-- some content -->
</div>
<div class="block all www">
<!-- some content -->
</div>
</div>
这最后一行实际上是有效的,并且每第三个div添加一个类“last”,但是在过滤块之后,该类将保留同一个div,这在第三个位置是不必要的。
所以,我的问题是-我如何合并这两个函数,以便在页面加载时将该类添加到每三个div中,然后在过滤块后删除并再次添加
任何帮助或协助都将不胜感激 轻微的疏忽,过滤需要隐藏元素,因此表达式“nth child(3n)”在过滤后根本不起作用。此外,修复代码非常简单,请参见以下内容:
$(function() {
var newSelection = "";
$("#blocks-nav a").click(function(){
$("#blocks-group").fadeTo(200, 0.10);
$("#blocks-nav a").removeClass("current");
$(this).addClass("current");
newSelection = $(this).attr("rel");
$("div.block")
.removeClass("last")
.not("."+newSelection)
.slideUp();
$("div.block."+newSelection)
.slideDown()
// unfortunatly, have to use an .each()
.each(function(i){
if ( !((i+1) % 3) ) { // every third from result set.
$(this).addClass("last")
}
});
$("#blocks-group").fadeTo(600, 1);
});
$("#blocks-group > div.block:nth-child(3n)").addClass( "last" );
});
请参阅此处的工作示例:我已尝试实施您的解决方案,但我一定是做错了什么。。这是我的代码:任命,新的解决方案。保留了对旧的无效解决方案的引用,因为我仍然认为该技术相当不错。您的新解决方案非常有效,但不是我需要的工作方式。它只将类“last”添加到最后一个元素,而不是每三个元素添加一次。是否有任何其他选项(除了表达式“nth child(3n)”之外)可以将类添加到每三个元素中,这将与过滤/隐藏元素一起工作?好的,再次更新代码,并使用working example.BGerrissen创建新的JSFIDLE链接。您是最好的!万分感谢!
$(function() {
var newSelection = "";
$("#blocks-nav a").click(function(){
$("#blocks-group").fadeTo(200, 0.10);
$("#blocks-nav a").removeClass("current");
$(this).addClass("current");
newSelection = $(this).attr("rel");
$("div.block")
.removeClass("last")
.not("."+newSelection)
.slideUp();
$("div.block."+newSelection)
.slideDown()
// unfortunatly, have to use an .each()
.each(function(i){
if ( !((i+1) % 3) ) { // every third from result set.
$(this).addClass("last")
}
});
$("#blocks-group").fadeTo(600, 1);
});
$("#blocks-group > div.block:nth-child(3n)").addClass( "last" );
});