aboutsummaryrefslogtreecommitdiffstats
path: root/src/traversing.js
diff options
context:
space:
mode:
authorjeresig <jeresig@gmail.com>2009-12-03 11:05:12 -0500
committerjeresig <jeresig@gmail.com>2009-12-03 11:05:12 -0500
commit525bb27bc0ccfcf384a209773eb93dc1b5a8cc09 (patch)
tree31c645753e673986fd662b3b76e7b4de0812b35f /src/traversing.js
parent4daae7a79f43815935a2890d16904c5a052717f3 (diff)
downloadjquery-525bb27bc0ccfcf384a209773eb93dc1b5a8cc09.tar.gz
jquery-525bb27bc0ccfcf384a209773eb93dc1b5a8cc09.zip
Prevent duplicate selectors from having to match in closest.
Diffstat (limited to 'src/traversing.js')
-rw-r--r--src/traversing.js15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/traversing.js b/src/traversing.js
index 796ae2f40..609e2ebb0 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;