aboutsummaryrefslogtreecommitdiffstats
path: root/src/selector.js
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2009-02-14 16:59:10 +0000
committerJohn Resig <jeresig@gmail.com>2009-02-14 16:59:10 +0000
commite16c7fe0f8e2998d2e3ca1bc8f0794c43b29526f (patch)
tree5d9196b6e3a829d71bb956c0d057285ae63ad350 /src/selector.js
parent848c45ea17cc03bcabd7ab882359e1c62f9485f5 (diff)
downloadjquery-e16c7fe0f8e2998d2e3ca1bc8f0794c43b29526f.tar.gz
jquery-e16c7fe0f8e2998d2e3ca1bc8f0794c43b29526f.zip
Make sure that elements are returned in document order - and that the results are unique.
Diffstat (limited to 'src/selector.js')
-rw-r--r--src/selector.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/selector.js b/src/selector.js
index 331ad3c07..bc898e143 100644
--- a/src/selector.js
+++ b/src/selector.js
@@ -111,6 +111,19 @@ var Sizzle = function(selector, context, results, seed) {
if ( extra ) {
Sizzle( extra, context, results, seed );
+
+ if ( sortOrder ) {
+ hasDuplicate = false;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
+ }
+ }
+ }
+ }
}
return results;
@@ -648,6 +661,26 @@ try {
};
}
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( document.documentElement.sourceIndex === 0 ) {
+ sortOrder = function( a, b ) {
+ var ret = a.sourceIndex - b.sourceIndex;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+}
+
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){