From 525bb27bc0ccfcf384a209773eb93dc1b5a8cc09 Mon Sep 17 00:00:00 2001 From: jeresig Date: Thu, 3 Dec 2009 11:05:12 -0500 Subject: [PATCH] Prevent duplicate selectors from having to match in closest. --- src/traversing.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/traversing.js b/src/traversing.js index 796ae2f..609e2eb 100644 --- a/src/traversing.js +++ b/src/traversing.js @@ -56,7 +56,7 @@ jQuery.fn.extend({ closest: function( selectors, context ) { if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], selector; + var ret = [], cur = this[0], match, selector, done; if ( cur && selectors.length ) { for ( var i = 0, l = selectors.length; i < l; i++ ) { @@ -67,11 +67,18 @@ jQuery.fn.extend({ while ( cur && cur.ownerDocument && cur !== context ) { for ( var i = 0; i < selectors.length; i++ ) { - selector = selectors[i]; - if ( selector.jquery ? selector.index(cur) > -1 : jQuery(cur).is(selector) ) { - selector = selector.selector || selector; + match = selectors[i]; + selector = match.selector || match; + + // Get rid of duplicate selectors + if ( selector === done ) { + selectors.splice(i--, 1); + + // See if we have a match + } else if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { ret.push({ selector: selector, elem: cur }); selectors.splice(i--, 1); + done = selector; } } cur = cur.parentNode; -- 1.7.10.4