IE doesn't like doing attaching the mergeNum property to XML documents, so for now...
[jquery.git] / src / jquery / jquery.js
index fe8b32b..57685b3 100644 (file)
@@ -24,7 +24,7 @@ window.undefined = window.undefined;
  */
 var jQuery = function(a,c) {
        // If the context is global, return a new object
-       if ( window == this )
+       if ( window == this || !this.init )
                return new jQuery(a,c);
        
        return this.init(a,c);
@@ -811,7 +811,7 @@ jQuery.fn = jQuery.prototype = {
 
        /**
         * Searches for all elements that match the specified expression.
-        
+        * 
         * This method is a good way to find additional descendant
         * elements with which to process.
         *
@@ -1443,7 +1443,7 @@ jQuery.extend({
                }
                
                if (prop.match(/float/i))
-                       prop = jQuery.browser.msie ? "styleFloat" : "cssFloat";
+                       prop = jQuery.styleFloat;
 
                if (!force && elem.style[prop])
                        ret = elem.style[prop];
@@ -1539,7 +1539,7 @@ jQuery.extend({
                                arg = jQuery.makeArray( div.childNodes );
                        }
 
-                       if ( 0 === arg.length && !jQuery(arg).is("form, select") )
+                       if ( 0 === arg.length && (!jQuery.nodeName(arg, "form") && !jQuery.nodeName(arg, "select")) )
                                return;
 
                        if ( arg[0] == undefined || jQuery.nodeName(arg, "form") || arg.options )
@@ -1565,7 +1565,16 @@ jQuery.extend({
 
                // IE elem.getAttribute passes even for style
                else if ( elem.tagName ) {
-                       // IE actually uses filters for opacity ... elem is actually elem.style
+                       
+
+                       if ( value != undefined ) elem.setAttribute( name, value );
+                       if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) 
+                               return elem.getAttribute( name, 2 );
+                       return elem.getAttribute( name );
+
+               // elem is actually elem.style ... set the style
+               } else {
+                       // IE actually uses filters for opacity
                        if ( name == "opacity" && jQuery.browser.msie ) {
                                if ( value != undefined ) {
                                        // IE has trouble with opacity if it does not have layout
@@ -1580,14 +1589,6 @@ jQuery.extend({
                                return elem.filter ? 
                                        (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "";
                        }
-
-                       if ( value != undefined ) elem.setAttribute( name, value );
-                       if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) 
-                               return elem.getAttribute( name, 2 );
-                       return elem.getAttribute( name );
-
-               // elem is actually elem.style ... set the style
-               } else {
                        name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
                        if ( value != undefined ) elem[name] = value;
                        return elem[name];
@@ -1665,11 +1666,15 @@ jQuery.extend({
        unique: function(first) {
                var r = [], num = jQuery.mergeNum++;
 
-               for ( var i = 0, fl = first.length; i < fl; i++ )
-                       if ( num != first[i].mergeNum ) {
-                               first[i].mergeNum = num;
-                               r.push(first[i]);
-                       }
+               try {
+                       for ( var i = 0, fl = first.length; i < fl; i++ )
+                               if ( num != first[i].mergeNum ) {
+                                       first[i].mergeNum = num;
+                                       r.push(first[i]);
+                               }
+               } catch(e) {
+                       r = first;
+               }
 
                return r;
        },
@@ -1810,7 +1815,7 @@ new function() {
 
        // Figure out what browser is being used
        jQuery.browser = {
-               version: b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)[1],
+               version: (b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
                safari: /webkit/.test(b),
                opera: /opera/.test(b),
                msie: /msie/.test(b) && !/opera/.test(b),
@@ -1820,12 +1825,14 @@ new function() {
        // Check to see if the W3C box model is being used
        jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
 
+       jQuery.styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat",
+
        jQuery.props = {
                "for": "htmlFor",
                "class": "className",
-               "float": jQuery.browser.msie ? "styleFloat" : "cssFloat",
-               cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
-               styleFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
+               "float": jQuery.styleFloat,
+               cssFloat: jQuery.styleFloat,
+               styleFloat: jQuery.styleFloat,
                innerHTML: "innerHTML",
                className: "className",
                value: "value",