Thanks David, that got me thinking in the right direction, ending up with this: http://jsbin.com/oyiyu/edit
$(function() { var selection = $(".container"); var target = $("a:first"); var targetParents = target.parents(); var filtered = selection.filter(function() { var container = this; return targetParents.filter(function() { return this == container; }).length; }); filtered.css("background-color", "red"); }); That selects the target's parents once, and filters them once for each container, which is quite acceptable. There probably still is some better way... Jörn On Fri, Feb 6, 2009 at 6:09 PM, David Zhou <da...@nodnod.net> wrote: > > What about something like (and this is very rough, but hopefully > conveys the general idea): > > jQuery.fn.hasDescendant = function(descendant) { > jQuery.data(this.get(0), "has_d", "found"); > descendant = jQuery(descendant); > while (descendant.parent().length) { > if (jQuery.data(descendant.parent().get(0), "has_d") == "found") { > jQuery.removeData(descendant.parent().get(0), "has_d"); > return true; > } else > descendant = descendant.parent(); > } > jQuery.removeData(this.get(0), "has_d"); > return false; > } > > -- dz > > > > On Fri, Feb 6, 2009 at 10:43 AM, Jörn Zaefferer > <joern.zaeffe...@googlemail.com> wrote: >> >> Nope, that isn't it. My example is simplified, and the target comes an >> event triggered elsewhere. So target is just a reference to a DOM >> element, and can't be replaced with some selector. >> >> Jörn >> >> On Fri, Feb 6, 2009 at 3:46 PM, David Zhou <da...@nodnod.net> wrote: >>> >>> Isn't that basically: >>> >>> if ($('.container a:first').length) >>> $('.container').css('background-color', 'red'); >>> >>> Unless I misunderstand what you're asking for? >>> >>> -- dz >>> >>> >>> >>> On Fri, Feb 6, 2009 at 6:58 AM, Jörn Zaefferer >>> <joern.zaeffe...@googlemail.com> wrote: >>>> >>>> I'm trying to solve the follow selector problem: Assuming two >>>> container elements that both have arbitrary descendents. Given a >>>> jQuery object containing these containers and one descendent of any of >>>> these, whats the most effecient way to find the correct parent >>>> element? Neither parents() nor closest() helps, as there is no >>>> sufficient simple selector available. >>>> In other words, I want to filter a selection by a descendent. >>>> >>>> My naiive implementation goes through all descendents, which isn't >>>> really acceptable: http://jsbin.com/uhama/edit >>>> >>>> Ideas? >>>> >>>> Jörn >>>> >>>> > >>>> >>> >>> > >>> >> >> > >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---