How can I highlight a selected list item with jquery?

前端 未结 4 1490
长情又很酷
长情又很酷 2020-12-11 04:23

I have several items in a list and want to highlight the one a user clicks on by applying some css style, maybe a background color etc.

My HTML looks like this:

相关标签:
4条回答
  • 2020-12-11 04:50
    $('.thumbnail').click(function(e) {
        e.preventDefault();
        $(this).css('background-color', 'red');
    })
    
    0 讨论(0)
  • 2020-12-11 04:58

    If you don't need the active to be persistent here's a CSS way:

    li:focus{
      background: red;
    }
    li:active{
      background: gold;
    }
    <ul>
      <li tabindex="1">Item 1</li>
      <li tabindex="1">Item 2</li>
      <li tabindex="1">Item 3</li>
    </ul>
    
    Now click <b>here</b> and see why it's not persistent.

    in some situations the above might be useful - to only highlight the currently "click-active" item…

    0 讨论(0)
  • 2020-12-11 05:08

    Your ??? would be:

    $('.thumbnail').removeClass('selected');
    $(this).addClass('selected');
    

    Then all you have to do is define your 'selected' css class.

    0 讨论(0)
  • 2020-12-11 05:15

    You could use jQuery's class management methods (namely addClass() and removeClass() in this case) to add a class on the selected item and remove the same class from all the other items (if you want only one selected at a time).

    //save class name so it can be reused easily
    //if I want to change it, I have to change it one place
    var classHighlight = 'highlight'; 
    
    //.click() will return the result of $('.thumbnail')
    //I save it for future reference so I don't have to query the DOM again
    var $thumbs = $('.thumbnail').click(function(e) {
        e.preventDefault();
        //run removeClass on every element
        //if the elements are not static, you might want to rerun $('.thumbnail')
        //instead of the saved $thumbs
        $thumbs.removeClass(classHighlight);
        //add the class to the currently clicked element (this)
        $(this).addClass(classHighlight);
    });
    

    Then in your CSS just add:

    .highlight {
        background-color: cyan;
        font-weight: bold;
    }
    

    jsFiddle Demo

    This is a better solution than changing CSS properties directly from jQuery/Javascript (with the .css() method for example), because separation of concerns will make your code more manageable and readable.

    0 讨论(0)
提交回复
热议问题