Brought the logic for handling isXMLDoc over from Sizzle.
[jquery.git] / src / core.js
index 6c439a5..13efaec 100644 (file)
@@ -206,20 +206,22 @@ jQuery.fn = jQuery.prototype = {
        },
 
        wrapAll: function( html ) {
-               if ( this[0] )
+               if ( this[0] ) {
                        // The elements to wrap the target around
-                       jQuery( html, this[0].ownerDocument )
-                               .clone()
-                               .insertBefore( this[0] )
-                               .map(function(){
-                                       var elem = this;
+                       var wrap = jQuery( html, this[0].ownerDocument ).clone();
+
+                       if ( this[0].parentNode )
+                               wrap.insertBefore( this[0] );
 
-                                       while ( elem.firstChild )
-                                               elem = elem.firstChild;
+                       wrap.map(function(){
+                               var elem = this;
 
-                                       return elem;
-                               })
-                               .append(this);
+                               while ( elem.firstChild )
+                                       elem = elem.firstChild;
+
+                               return elem;
+                       }).append(this);
+               }
 
                return this;
        },
@@ -619,8 +621,8 @@ jQuery.extend({
 
        // check if an element is in a (or is an) XML document
        isXMLDoc: function( elem ) {
-               return elem.documentElement && !elem.body ||
-                       elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
+               return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+                       !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
        },
 
        // Evalulates a script in a global context
@@ -984,9 +986,11 @@ jQuery.extend({
                                        var attributeNode = elem.getAttributeNode( "tabIndex" );
                                        return attributeNode && attributeNode.specified
                                                ? attributeNode.value
-                                               : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)
+                                               : elem.nodeName.match(/(button|input|object|select|textarea)/i)
                                                        ? 0
-                                                       : undefined;
+                                                       : elem.nodeName.match(/^(a|area)$/i) && elem.href
+                                                               ? 0
+                                                               : undefined;
                                }
 
                                return elem[ name ];