X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fselector.js;h=ecec83b9fccc833a39135974e754ebf5ee2bec3b;hb=21dde30348fe9bcbd8db8c1b30e470a9e2f39c16;hp=331ad3c073aac5be3c884b2ae9f81b85f61b3aeb;hpb=831b15b06c338096c751a90354bbd53241485b12;p=jquery.git diff --git a/src/selector.js b/src/selector.js index 331ad3c..ecec83b 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; @@ -320,8 +333,9 @@ var Expr = Sizzle.selectors = { } }, NAME: function(match, context, isXML){ - if ( typeof context.getElementsByName !== "undefined" && !isXML ) { - return context.getElementsByName(match[1]); + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = context.getElementsByName(match[1]); + return ret.length === 0 ? null : ret; } }, TAG: function(match, context){ @@ -648,6 +662,29 @@ try { }; } +var sortOrder; + +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; + }; +} else if ( document.documentElement.sourceIndex === 1 ) { + 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(){