限制一次悬停到一个div的更改

时间:2011-07-26 11:49:43

标签: jquery css xhtml

我有三个无序列表,每个列表都被一个容器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>

2 个答案:

答案 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只查找父容器中的匹配元素。