Filter element based on .data() key/value

前端 未结 5 1467
庸人自扰
庸人自扰 2020-12-12 13:08

Say I have 4 div elements with class .navlink, which, when clicked, use .data() to set a key called \'selected\', to a value of

相关标签:
5条回答
  • 2020-12-12 13:56

    We can make a plugin pretty easily:

    $.fn.filterData = function(key, value) {
        return this.filter(function() {
            return $(this).data(key) == value;
        });
    };
    

    Usage (checking a radio button):

    $('input[name=location_id]').filterData('my-data','data-val').prop('checked',true);
    
    0 讨论(0)
  • 2020-12-12 14:01

    Two things I noticed (they may be mistakes from when you wrote it down though).

    1. You missed a dot in the first example ( $('.navlink').click )
    2. For filter to work, you have to return a value ( return $(this).data("selected")==true )
    0 讨论(0)
  • 2020-12-12 14:07

    your filter would work, but you need to return true on matching objects in the function passed to the filter for it to grab them.

    var $previous = $('.navlink').filter(function() { 
      return $(this).data("selected") == true 
    });
    
    0 讨论(0)
  • 2020-12-12 14:08

    Sounds like more work than its worth.

    1) Why not just have a single JavaScript variable that stores a reference to the currently selected element\jQuery object.

    2) Why not add a class to the currently selected element. Then you could query the DOM for the ".active" class or something.

    0 讨论(0)
  • 2020-12-12 14:10

    Just for the record, you can filter on data with jquery (this question is quite old, and jQuery evolved since then, so it's right to write this solution as well):

    $('.navlink[data-selected="true"]');
    

    or, better (for performance):

    $('.navlink').filter('[data-selected="true"]');
    

    or, if you want to get all the elements with data-selected set:

    $('[data-selected]')
    

    Note that this method will only work with data that was set via html-attributes. If you set or change data with the .data() call, this method will no longer work.

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