I think the method you're looking for is .not():

http://docs.jquery.com/Traversing/not

Also, there is a shortcut for your mouseenter/mouseleave pattern called
.hover():

http://docs.jquery.com/Events/hover

If you look at the source code for .hover(), you can see that it is
literally a wrapper for the two mouse events:

    hover: function(fnOver, fnOut) {
        return this.mouseenter(fnOver).mouseleave(fnOut);
    },

One other concern: It is invalid HTML to have a DIV element inside an A
element. DIV is a block-level element and A is an inline element. You cannot
have a block-level element inside an inline element. It will probably work
in most browsers, but it's possible that some browser may decide to
rearrange your elements to create a valid result.

Setting that aside, your code might end up looking like:

<script type="text/javascript">
   $(document).ready(function() {
       $('.page_item').not('.current_page_item').hover(
            function() { $(this).children('a').children('div').fadeIn(0); },
            function() { $(this).children('a').children('div').fadeOut(200);
}
        );
   });
</script>

You could also (again ignoring the invalid HTML problem) simplify the
.children bit like this:

    $(this).find('>a>div').fadeIn (or fadeOut)

There's no advantage to that other than brevity, so if you prefer the
.children().children() approach that's fine too.

-Mike

On Thu, Nov 26, 2009 at 2:39 PM, Janmansilver <jan.poul...@gmail.com> wrote:

> I have a menu looking like this:
>
> <li class="page_item current_page_item">...</li>
> <li class="page_item">...</li>
> <li class="page_item">...</li>
>
> and so on...
>
> I then have a mouseenter function that highlights/"de"-highlights the
> various menu items, but I would like to not having it affect the item
> with the extra class "current_page_item". How do I solve this?
>
> my current code:
>
> <script type="text/javascript">
>    $(document).ready(function() {
>        $('.page_item').mouseenter(function(e) {
>
>                $(this).children('a').children('div').fadeIn(0);
>
>        }).mouseleave(function(e) {
>
>                $(this).children('a').children('div').fadeOut(200);
>
>        });
>    });
> </script>
>

Reply via email to