From 4b7e1c906f497784329622d82da08c8646cae7e6 Mon Sep 17 00:00:00 2001 From: John Resig Date: Tue, 17 Feb 2009 17:43:05 +0000 Subject: [PATCH] Brought back the compareDocumentPosition code. While it is redundant in Firefox it's much faster than using indexOf. --- src/selector.js | 12 ++++++++++-- test/unit/selector.js | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/selector.js b/src/selector.js index c97ba61ff..6538d9706 100644 --- a/src/selector.js +++ b/src/selector.js @@ -684,7 +684,15 @@ try { var sortOrder; -if ( Array.prototype.indexOf ) { +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 ( Array.prototype.indexOf ) { var indexOf = Array.prototype.indexOf, allSort = document.getElementsByTagName("*"); @@ -695,7 +703,7 @@ if ( Array.prototype.indexOf ) { } return ret; }; -} else if ( document.documentElement.sourceIndex === 1 ) { +} else if ( "sourceIndex" in document.documentElement ) { sortOrder = function( a, b ) { var ret = a.sourceIndex - b.sourceIndex; if ( ret === 0 ) { diff --git a/test/unit/selector.js b/test/unit/selector.js index a6b0458cd..425ad8c83 100644 --- a/test/unit/selector.js +++ b/test/unit/selector.js @@ -1,7 +1,7 @@ module("selector"); test("element", function() { - expect(17); + expect(18); reset(); ok( jQuery("*").size() >= 30, "Select all" ); @@ -25,7 +25,7 @@ test("element", function() { ok( jQuery("#lengthtest input").length, '<input name="length"> cannot be found under IE, see #945' ); // Check for unique-ness and sort order - //isSet( jQuery("*"), jQuery("*, *"), "Check for duplicates: *, *" ); + isSet( jQuery("*"), jQuery("*, *"), "Check for duplicates: *, *" ); isSet( jQuery("p"), jQuery("p, div p"), "Check for duplicates: p, div p" ); t( "Checking sort order", "h2, h1", ["header", "banner", "userAgent"] );