我有三个无序列表,每个列表都被一个容器div包围(下面显示了一个示例,对于所有三个div来说几乎相同)。每个列表都是一个链接,一旦用户将鼠标悬停在链接上,段落中的文本就会发生变化。我已设法做到这一点,但在悬停时,所有三个div的段落的文本发生了变化。我知道为什么会这样,但不知道如何修改我的代码。
div ul li span {
display: none;
}
$(document).ready(function () {
$("div ul li a").hover(function() {
$(this).parent().addClass('current').siblings().removeClass('current');
$('.highlight').html($('.current a span').html());
});
});
<div>
<ul>
<li><a href="#"><img src="images/test-1.gif" alt="#"></img><span>Test</span></a></li>
<li><a href="#"><img src="images/test-2.gif" alt="#"></img><span>Testing</span></a></li>
<li><a href="#"><img src="images/test-3.gif" alt="#"></img><span>More Testing!!!</span></a></li>
<li class="last"><a href="#"><img src="images/test-4.gif" alt="#"></img><span>Even More More Testing!!!</span></a></li>
</ul>
<p class="highlight">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus in eros tortor.</p>
</div>
答案 0 :(得分:1)
html($('.current a span').html())
每次都会在第一个div中获取.current。
尝试使用html($(this).find('span').html())
$("div ul li a").hover(function() {
$(this).parent().addClass('current').siblings().removeClass('current');
$(this).closest("div").find('.highlight').html($(this).find('span').html());
});
答案 1 :(得分:0)
当你调用$('。highlight')时,jQuery将返回整个文档中具有该类名的所有元素。你应该这样称呼它:
$(document).ready(function () {
$("div ul li a").hover(function() {
var that = $(this),
li = that.parent(),
ul = li.parent();
parent.addClass('current').siblings().removeClass('current');
$('.highlight', li).html($('.current a span', ul).html());
});
});
注意以下代码块中的第二个参数'li':
$('.highlight', li)
这告诉jQuery只查找父容器中的匹配元素。