X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=sidebyside;f=src%2Fselector.js;h=3e1d7115d2a82f123d2792d81be529b827c3c325;hb=a37ca9e9058243169725982e91bce60801b9857d;hp=c97ba61ff2bdc39db041f9178eb80b8cc95423ba;hpb=048fc4555f8a794239a985c63cff3f76d20d6c61;p=jquery.git diff --git a/src/selector.js b/src/selector.js index c97ba61..3e1d711 100644 --- a/src/selector.js +++ b/src/selector.js @@ -684,18 +684,15 @@ try { var sortOrder; -if ( Array.prototype.indexOf ) { - var indexOf = Array.prototype.indexOf, - allSort = document.getElementsByTagName("*"); - +if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { - var ret = indexOf.call( allSort, a ) - indexOf.call( allSort, b ); + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; if ( ret === 0 ) { hasDuplicate = true; } 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 ) { @@ -703,6 +700,19 @@ if ( Array.prototype.indexOf ) { } return ret; }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.selectNode(a); + aRange.collapse(true); + bRange.selectNode(b); + bRange.collapse(true); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; } // Check to see if the browser returns elements by name when