当元素共享同一个类时,使用jquery应用悬停的问题

时间:2013-08-27 16:31:02

标签: jquery css

当元素共享同一个类时,我有一个问题是使用jquery应用hover。当使用CSS时,这非常好,但只要JQuery出现,它就会改变一切。

CSS

.btn {
background:#ccc;
padding:10px;
}
.btn:hover {
background:red;
padding:10px;
}

HTML

<a class="btn">Button 1</a><br /><br /><br />
<a class="btn">Button 2</a><br /><br /><br />
<a class="btn">Button 3</a><br /><br /><br />

<div id="paragraph"><p>Everything works fine with normal css Hover...</p></div>

<input type="button" id="btnchange" value="Change to JQuery Hover, blue color" />

JQuery的

$('#btnchange').bind('click', function() {

                $(".btn").hover(function(){
                $(".btn").css({background: "blue"});
                },function(){
                $(".btn").css({background: "#ccc"});
                }); 

                $("#paragraph").html('<p>But then, when applying jquery hover, things work unexpectedly</p>');

});

这是实时Fiddle

我不必修改HTML代码,只需修改JQuery。

3 个答案:

答案 0 :(得分:7)

Revised jsFiddle

jQuery代码,就像你编写的那样,选择类“btn”的所有元素并将它们全部变为蓝色。您只需选择触发悬停事件的元素并将其变为蓝色。因此,

改变这个:

$('.btn').css({background: "blue"});

到此:

$(this).css({background: "blue"});

答案 1 :(得分:2)

使用悬停功能中的$(this)选择器来定位实际的悬停元素:

$(".btn").hover(function(){
   $(this).css({background: "blue"});
},function(){
   $(this).css({background: "#ccc"});
}); 

答案 2 :(得分:2)

将悬停内的".btn"更改为$(this)

JQuery Demo

$('#btnchange').bind('click', function() {

                    $(".btn").hover(function(){
                    $(this).css({background: "blue"});
                    },function(){
                    $(this).css({background: "#ccc"});
                    }); 

                    $("#paragraph").html('<p>But then, when applying jquery hover, things work unexpectedly</p>');

});