我们需要能够基于当前悬停的元素隐藏和显示元素。我们在下面尝试了以下方法,但是它不会添加is-active
类,也不会根据悬停的其他元素将其删除。
如何基于当前悬停的元素隐藏和显示元素?
目标(基于以下示例):
some
下的first
上时,使用<div class="two" id="some-link">some link</div>
类显示is-active
path
下的first
上时,<div class="two" id="some-link">some linke</div>
应该不会显示(删除is-active
类),而<div class="two" id="path-link">path link</div>
应该显示(添加{{1 }}类)当前问题:
is-active
类在悬停元素更改时未删除
is-active
$(function() {
$('li#two').hover( function() {
var el_two = $(this);
var el_id = el_two.attr('id');
var el_link = el_two.attr('data-at');
var el_sel = '#'+el_link+'.'+ el_id;
var el_parent = el_two.parent().parent();
el_parent.find('.is-active').removeClass('is-active');
$(el_sel).addClass('is-active');
});
});
.two {
display: none;
}
.is-active {
display: block;
}
答案 0 :(得分:1)
首先,您的.find()
使用了错误的选择器。您有find('is-active')
这是一个元素名称选择器,您想要一个CSS类选择器,即.is-active
。
el_parent.find('.is-active').removeClass('is-active');
请注意removeClass()
,您不会使用css选择器,而只使用类名,因此为什么在该调用中不需要点号
现在,如果您还希望在将鼠标悬停在元素上时也删除该类,则需要为此添加一个事件侦听器,然后从那里调用removeClass。 .hover()
使用第二个参数来设置此类事件侦听器回调。
$('li#two').hover(onHoverCallback,function(){
//code for finding the right element
$(el_sel).removeClass('is-active');
})
$(function() {
$('li#two').hover( function() {
var el_two = $(this);
var el_id = el_two.attr('id');
var el_link = el_two.attr('data-at');
var el_sel = '#'+el_link+'.'+ el_id;
var el_parent = el_two.parent().parent();
el_parent.find('.is-active').removeClass('is-active');
$(el_sel).addClass('is-active');
},function(){
var el_two = $(this);
var el_id = el_two.attr('id');
var el_link = el_two.attr('data-at');
var el_sel = '#'+el_link+'.'+ el_id;
$(el_sel).removeClass("is-active");
});
});
.two {
display: none;
}
.is-active {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li id="one">
<a href="#"> first</a>
<div class="one">
<ul>
<li data-at="some-link" id="two">
<a href="#"> some</a>
</li>
<li data-at="path-link" id="two">
<a href="#"> path</a>
</li>
<li data-at="another-one" id="two">
<a href="#"> another one</a>
</li>
</ul>
<div class="dropdown">
<div class="two" id="some-link">some link text</div>
<div class="two" id="path-link">path link</div>
<div class="two" id="another-one">another one</div>
</div>
</div>
</li>
<li id="one">
<a href="#"> second</a>
<div class="one">
<ul>
<li>
<a href="#"> another some</a>
</li>
<li>
<a href="#"> another path</a>
</li>
</ul>
</div>
</li>
<li id="one">
<a href="#"> third</a>
<div class="one">
<ul>
<li>
<a href="#"> third some</a>
</li>
<li>
<a href="#"> third path</a>
</li>
</ul>
</div>
</li>
</ul>