我在<div>
内有几个<span>
元素。当您将鼠标悬停在一个<span>
上时,它应该突出显示之前的所有<spans>
以及悬停<span>
。选择同一父母的所有在前孩子
我该如何使用CSS或jQuery来做到这一点?
我怀疑一个jQuery答案将做到以下几点,但我无法找到函数1 & 2.
- 获取当前悬停的元素的子#
- 选择所有孩子最多
- 将“悬停”类添加到他们
我在<div>
内有几个<span>
元素。当您将鼠标悬停在一个<span>
上时,它应该突出显示之前的所有<spans>
以及悬停<span>
。选择同一父母的所有在前孩子
我该如何使用CSS或jQuery来做到这一点?
我怀疑一个jQuery答案将做到以下几点,但我无法找到函数1 & 2.
您可以用jQuery做到这一点:
$('span').hover(function(){
$(this).prevAll().addClass('hover');
},function(){
$(this).prevAll().removeClass('hover');
});
这使用prevAll选择同一div的所有前面的跨度。不需要使用当前元素的索引,但是可以使用索引函数获得它,然后使用lt选择器($(this).sibblings(":lt("+$(this).index+")")
)。当然,prevAll要简单得多。
由于注意到了elclarns,这可以在
$('span').hover(function(){
$(this).prevAll().toggleClass('hover');
});
缩短按照规定,我什么都看不到难在这里,我们将使用prevAll()函数来选择所有的兄弟姐妹先前的例子基于当前项目。
$("span").hover(function(){
$(this).prevAll().addClass("hover");
}, function(){
$(this).removeClass("hover");
})
这取决于兼容性,可以使用CSS,虽然没有加入类名称:
div:hover span {
/* colours all descendent spans of hovered-div */
background-color: #ffa;
}
div:hover span:hover,
div:hover span:hover ~ span {
/* 'de-colours' the hovered-span, and
the subsequent sibling spans */
background-color: #fff;
}
有趣。你可以修复它,使它不着色最后一个div,如果你把它悬停? –
应该指出的是[这与IE7或IE8不兼容](http://caniuse.com/#feat=css-sel3)。 –
@dystroy:我不完全确定我理解你的第一个评论,但我认为你的意思是当':hover'离开'span'时突然闪烁,突出显示所有'span',直到另一个'span'被徘徊?如果是这样,否(尽管可能以某种方式)。至于IE <9,不,这是一个相当有限的演示,不幸的是。但是,正如你所说的那样,“有趣”。如果仅仅作为概念验证...... =) –
上帝,我爱jQuery的。感谢dystroy! –
更简短:'$(this).prevAll()。toggleClass('hover')'http://jsfiddle.net/6zm3E/2/ – elclanrs
这是一个很好的答案我写了一个最接近.container,然后nextUntill - 这很简单 –