jQuery method to select a subset and also its inverse?

前端 未结 2 389
说谎
说谎 2021-01-20 11:33

Given some jQuery object set, and also a subset of that set, is there a method that will return the inverse subset?

If the answer is \"No

相关标签:
2条回答
  • 2021-01-20 11:42

    There's no built-in function for this, the reverse filter is what you're after...the alternative isn't chainable. The alternative would be .not(), like this:

    var all = $('li').css('background-color','blue');
    var sub = all.filter('.subset').css('color','black');
    all.not(sub).css('color','white');
    

    ...but again it's not pretty, I'd stick with the .end().filter() approach. However, if performance is paramount, use the .not() approach above, it is more efficient (since no selector runs for the inverse set).


    For your specific example (though not the general question), it'd be pretty quick to do this:

    $('li').css('background-color','blue').css('color','white')
           .filter('.subset').css('color','black');
    
    0 讨论(0)
  • 2021-01-20 12:05

    Here is a little extension to jquery about it that i just made..

    (function($) {
      $.fn.reverse = function () 
      {
          var orig = this.prevObject || jQuery(null);
          return orig.not(this);
      }
    })(jQuery);
    

    It will maintain the chaining, so you can still do .end() after it and return to the previous filtering.

    You can call it like

    $('li').css('background-color','blue')
      .filter('.subset')
        .css('color','black')
      .reverse()  // <-- White Whale?!?
        .css('color','white');
    

    Demo with your example: http://www.jsfiddle.net/gaby/THLkn/

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