简体   繁体   中英

HTML tags won't accept my CSS classes when changed via JavaScript

I'm trying to change the classes of certain HTML elements when clicked on using JavaScript, but having some trouble.

Here's the JavaScript:

$(document).ready(function() {
 $('#subnav li a').click(function(){
    var $this = $(this);
    $this.addClass('highlight').siblings('a').removeClass('highlight');
 });
});

Here's the corresponding HTML:

<div id="subnav">
    <ul id="subnav-ul">
        <li><a href="javascript:;" class="highlight">Click 1</a></li>
        <li><a href="javascript:;">Click 2</a></li>
        <li><a href="javascript:;">Click 3</a></li>
    </ul>
</div>

The single CSS class is as follows:

.highlight {
border-left: 4px solid rgba(51,102,255,.6);
color: rgba(0,0,0,.8);
}

The anchors are not siblings, they are within LI elements that are siblings

$('#subnav li a').click(function(){
    $(this).addClass('highlight')
           .closest('li')
           .siblings('li')
           .find('a')
           .removeClass('highlight');
});
$('#subnav li a').click(function(){
    $(this).addClass('highlight');
    $(this).parent().siblings('li').find('a').removeClass('highlight');

});

Try the above code.

The anchors are not siblings to one another. They are cousins.

It's not removing the highlight class because you have:

$this.addClass('highlight').siblings('a')

when it should be:

$this.parent().siblings('li').find('a')

Example

http://jsfiddle.net/DU7V8/1/

Try this code:

$(function() {
 $('#subnav li a').click(function(){
    $('#subnav li a.highlight').removeClass('highlight'); //remove class in all links
    $(this).addClass('highlight'); //add class in current link
 });
});

$(function(){}); is the shortcut to $(document).ready(function() {});

I hope this help.

lets dont forget about find('a') output is array

Try this:

$(document).ready(function() {
  $('#subnav li a').click(function(){
    $(this).addClass('highlight');
    $(this).parent().siblings('li').find('a').each(function(){
      $(this).removeClass('highlight');
    });
  });
});

See on jsFiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM