From: John Resig <jeresig@gmail.com>
Date: Sat, 14 Feb 2009 18:10:45 +0000 (+0000)
Subject: Added support for sorting in Safari - when querySelectorAll isn't able to be used.
X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=6f4b08cdf9cb334f8531fe06a20153defb7f95b6;p=jquery.git

Added support for sorting in Safari - when querySelectorAll isn't able to be used.
---

diff --git a/src/core.js b/src/core.js
index b3142d0..e0428c4 100644
--- a/src/core.js
+++ b/src/core.js
@@ -75,7 +75,9 @@ jQuery.fn = jQuery.prototype = {
 			this.context = selector.context;
 		}
 
-		return this.setArray(jQuery.makeArray(selector));
+		return this.setArray(jQuery.isArray( selector ) ?
+			selector :
+			jQuery.makeArray(selector));
 	},
 
 	// Start with an empty selector
@@ -95,7 +97,7 @@ jQuery.fn = jQuery.prototype = {
 		return num === undefined ?
 
 			// Return a 'clean' array
-			jQuery.makeArray( this ) :
+			Array.prototype.slice.call( this ) :
 
 			// Return just the object
 			this[ num ];
diff --git a/src/selector.js b/src/selector.js
index 5712f57..6b3b2da 100644
--- a/src/selector.js
+++ b/src/selector.js
@@ -679,6 +679,17 @@ if ( document.documentElement.compareDocumentPosition ) {
 		}
 		return ret;
 	};
+} else if ( Array.prototype.indexOf ) {
+	var indexOf = Array.prototype.indexOf,
+		allSort = document.getElementsByTagName("*");
+
+	sortOrder = function( a, b ) {
+		var ret = indexOf.call( allSort, a ) - indexOf.call( allSort, b );
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
 }
 
 // Check to see if the browser returns elements by name when
diff --git a/test/unit/selector.js b/test/unit/selector.js
index 2ab7e6a..715823a 100644
--- a/test/unit/selector.js
+++ b/test/unit/selector.js
@@ -1,7 +1,7 @@
 module("selector");
 
 test("element", function() {
-	expect(13);
+	expect(14);
 	reset();
 
 	ok( jQuery("*").size() >= 30, "Select all" );
@@ -24,6 +24,7 @@ test("element", function() {
 	isSet( jQuery("p"), jQuery("p, div p"), "Check for duplicates: p, div p" );
 
 	t( "Checking sort order", "h2, h1", ["header", "banner", "userAgent"] );
+	t( "Checking sort order", "h2:first, h1:first", ["header", "banner"] );
 	t( "Checking sort order", "p, p a", ["firstp", "simon1", "ap", "google", "groups", "anchor1", "mark", "sndp", "en", "yahoo", "sap", "anchor2", "simon", "first"] );
 });