2011-01-24 42 views
2

我有像这样的列表:jQuery的添加类的所有兄弟姐妹,除了1

<ul id="items"><li><a href="">Link</a></li><li><a href="">Link</a></li><li class="divider"></li><li><a href="">Link</a></li><li><a href="">Link</a></li></ul> 

当我点击任何一个锚我想添加一个类的所有李时珍除的父我点击的链接和“divider”类的li。

我可以得到它与所有与此有关的兄弟姐妹工作:

$(this).parent().siblings().attr("class", "transparent"); 

那么,如何得到它忽略的“分水岭”类里?

非常感谢。

回答

12

您还可以使用.not命令从一组不希望过滤掉任何东西。这是一个替代传递在Matt提到的伪类选择器的CSS :not

$(this).parent().siblings().not(".divider").addClass("transparent"); 

而且它可能会更好使用.addClass.removeClass

编辑:

jQuery是不好的,使用DOM)

link.addEventListener("click", function addClasses() { 
    var li = this.parentNode, 
     lis = li.parentNode.children; 

    [].forEach.call(lis, function addClassIfCorrect(el) { 
     var classList = el.classList 
     if (el !== li && !classList.contains("divider")) { 
      classList.add("transparent"); 
     } 
    }); 
}); 
+0

jquery建议使用.not()方法。 – heymrcarter

+0

+1,方法pwn选择器! :o) – jAndy

+0

感谢这工作就像一个魅力。非常感激。 – Daelan

2

您可以排除在您的通话将dividersiblings

$(this).parent().siblings(':not(.divider)').attr("class", "transparent"); 
+2

回答说: “2秒前” .. .............. +1 – BoltClock