Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

A couple of questions about jQuery addClass()

Posted on 2015-01-16
4
Medium Priority
?
129 Views
Last Modified: 2015-01-16
I have two questions:

1) I have a <div> with child elements. When I do an addClass(".yellowBackground") to the <div>, all its children are getting it too. How can I prevent that from happening so that only the <div> gets the class?

2) Also, it seems like there is duplication happening at times where an element would have the same class added in twice. I'm not sure why that's happening because when I tested addClass(), adding an already existent class does not duplicate it. Any idea what might be causing this?

Thanks.
0
Comment
Question by:elepil
  • 2
4 Comments
 
LVL 9

Accepted Solution

by:
Valliappan AN earned 1600 total points
ID: 40553984
1) $( "div:first" ).addClass("yellowBackground') should work, please try and let know.

2) In case you add styles from multiple addClass, multiple matching selectors at various places, or an inline style or a page or external style may be collapsing with your addClass. Try to find the roots may be using Firebug in Firefox, or Inspect Element in Chrome, or IE.

HTH.
0
 
LVL 9

Assisted Solution

by:Jim Riddles
Jim Riddles earned 400 total points
ID: 40554173
Elipil,

Do you have some sample code (HTML and Javascript) that you can show?  That would be a huge help in solving your issue.
0
 

Author Comment

by:elepil
ID: 40554577
Okay, I think I know why my code isn't working. Let me present the code first, and I'll explain:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta charset="UTF-8">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $(".event").hover(fnMouseIn, fnMouseOut);
                
                function fnMouseIn(event) {
                    console.log($(event.target).prop("tagName"));
                    $(event.target).addClass("yellowBackground");
                }
                function fnMouseOut(event) {
                    console.log($(event.target).prop("tagName"));
                    $(event.target).removeClass("yellowBackground");
                }
            });
        </script>
        <style>
            div {
                height: 100px;
            }
            .yellowBackground {
                background-color: cornsilk;
            }
            .highlightEventDate {
                font-weight: bold;
                text-decoration: underline;
                color: red;
            }
        </style>
    </head>
    <body>
        <div class="event">
            <ul><li class="eventDate">January 7, 2015</li></ul>
        </div>
        <div class="event">
            <ul><li class="eventDate">January 7, 2015</li></ul>
        </div>
        <div class="event">
            <ul><li class="eventDate">January 7, 2015</li></ul>
        </div>
        <div class="event">
            <ul><li class="eventDate">January 7, 2015</li></ul>
        </div>
    </body>
</html>

Open in new window


My objective is simple -- when the mouse hovers over the <div>, the background changes to yellow, and the <li class="eventDate"> become bold, underlined, and red.

By the way, I DO know there are better ways of doing this, but in reaching my ultimate solution, I stumbled across this scenario, and I just wanted to understand why it wasn't working right, and I think I know why.

I think the problem is that even though I created the hover event for the <div>, even the child elements are propagating the event upwards, causing event.target to change, causing my code to apply the style to the wrong element.

So I guess my real problem is, how can I make the mouseover and mouseout events NOT fire with the child elements but only the <div>?
0
 

Author Closing Comment

by:elepil
ID: 40554797
I actually found the answer. I gave Valliappan AN more points because his post was actually a recommended solution. I gave Jim Riddles some points for simply responding.

Thank you both!
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

What is a Lightbox? A Lightbox is the effect you see when you click, for example, an image and the screen fades out and up pops the same image but in its full size dimensions. There are lots of Lightbox effects for jQuery. Problem is they are a…
This article discusses how to implement server side field validation and display customized error messages to the client.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…
Suggested Courses
Course of the Month10 days, 17 hours left to enroll

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question