80

I need to define a div's background color on :hover with jQuery, but the following doesn't seem to work:

$(".myclass:hover div").css("background-color","red");

How can I get the same result? It's important that it has to be done with jQuery but for some reason it doesn't work. Any suggestions? Thanks!

8
  • 1
    Try this stackoverflow.com/questions/5986464/… Commented Jan 10, 2014 at 18:14
  • 2
    jQuery selects elements; it doesn't define CSS rules. Even had that been possible, it wouldn't do what you want. Commented Jan 10, 2014 at 18:16
  • Pseudo-selectors are not technically part of the DOM and therefore cannot be manipulated using JavaScript. Commented Jan 10, 2014 at 18:16
  • 1
    Define a CSS rule to do this. If you really have to, you can insert a <style> element containing the rule programmatically (with JavaScript) but I'd really like to hear why you can't properly define the rule in your own stylesheet. Commented Jan 10, 2014 at 18:18
  • Ok wait a moment, i create a fiddle to show the exact problem and why it can't be done via css Commented Jan 10, 2014 at 18:20

6 Answers 6

97

I would suggest to use CSS over jquery ( if possible) otherwise you can use something like this

$("div.myclass").hover(function() {
  $(this).css("background-color","red")
});

You can change your selector as per your need.

As commented by @A.Wolff, If you want to use this hover effect to multiple classes, you can use it like this

$(".myclass, .myclass2").hover(function(e) { 
    $(this).css("background-color",e.type === "mouseenter"?"red":"transparent") 
})

Js Fiddle Demo

Sign up to request clarification or add additional context in comments.

9 Comments

That can be done, but my problem is i have a lot of selectors... For example, my code looks like this: $(".logo, .logo-main, .logo-main:hover em, .another, .another:hover div").css("background","red"); That's why I'd like to avoid this method..
I guess you mean: $(".myclass").hover(function(e) { $(this).find('div').css("background-color",e.type === "mouseenter"?"red":"transparent") });
This answer is correct for this question. You change the select per your needs.
@George look at your selectors, you want red background for normal class as well as on their :hover state. So why not simply give them background:red
@Sachin i don't understand what you mean here: "look at your selectors, you want red background for normal class as well as on their :hover state" ?
|
32

You can try this:

$(".myclass").mouseover(function() {
    $(this).find(" > div").css("background-color","red");
}).mouseout(function() {
    $(this).find(" > div").css("background-color","transparent");
});

DEMO

Comments

23

I know this has an accepted answer but if anyone comes upon this, my solution may help.

I found this question because I have a use-case where I wanted to turn off the :hover state for elements individually. Since there is no way to do this in the DOM, another good way to do it is to define a class in CSS that overrides the hover state.

For instance, the css:

.nohover:hover {
    color: black !important;
}

Then with jQuery:

$("#elm").addClass("nohover");

With this method, you can override as many DOM elements as you would like without binding tons of onHover events.

1 Comment

just had the same situation as described. nice solution
15

Well, you can't add styling using pseudo selectors like :hover, :after, :nth-child, or anything like that using jQuery.

If you want to add a CSS rule like that you have to create a <style> element and add that :hover rule to it just like you would in CSS. Then you would have to add that <style> element to the page.

Using the .hover function seems to be more appropriate if you can't just add the css to a stylesheet, but if you insist you can do:

$('head').append('<style>.myclass:hover div {background-color : red;}</style>')

If you want to read more on adding CSS with javascript you can check out one of David Walsh's Blog posts.

Comments

8

Use JQuery Hover to add/remove class or style on Hover:

$( "mah div" ).hover(
  function() {
    $( this ).css("background-color","red");
  }, function() {
    $( this ).css("background-color",""); //to remove property set it to ''
  }
);

1 Comment

Works great, within React as well
2

It's too late, however the best example, how to add pseudo element in jQuery style

 $(document).ready(function(){
 $("a.dummy").css({"background":"#003d79","color":"#fff","padding": "5px 10px","border-radius": "3px","text-decoration":"none"});
 $("a.dummy").hover(function() {
            $(this).css("background-color","#0670c9")
          }).mouseout(function(){
              $(this).css({"background-color":"#003d79",});
          });
 
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<a class="dummy" href="javascript:void()">Just Link</a>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.