Improved jQuery.prop to handle "px" on computed values
[jquery.git] / src / jquery / jquery.js
index e58f895..38caaf0 100644 (file)
@@ -1280,7 +1280,7 @@ jQuery.extend({
        prop: function(elem, value, type, index, prop){
                        // Handle executable functions
                        if ( jQuery.isFunction( value ) )
-                               return value.call( elem, [index] );
+                               value = value.call( elem, [index] );
                                
                        // exclude the following css properties to add px
                        var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
@@ -1470,7 +1470,7 @@ jQuery.extend({
                        if ( arg.length === 0 )
                                return;
                        
-                       if ( arg[0] == undefined )
+                       if ( arg[0] == undefined || (jQuery.browser.msie && jQuery.nodeName(arg,"form")) )
                                r.push( arg );
                        else
                                r = jQuery.merge( r, arg );
@@ -1513,7 +1513,6 @@ jQuery.extend({
                if ( name == "opacity" && jQuery.browser.mozilla && value == 1 )
                        value = 0.9999;
                        
-               // 
 
                // Certain attributes only work when accessed via the old DOM 0 way
                if ( fix[name] ) {
@@ -1525,10 +1524,12 @@ jQuery.extend({
 
                // IE elem.getAttribute passes even for style
                else if ( elem.tagName ) {
-                       if ( value != undefined ) 
-                               elem.setAttribute( name, value );
+                       if ( value != undefined ) elem.setAttribute( name, value );
+                       if ( jQuery.browser.msie && !jQuery.isXMLDoc(elem) && /^(href|src|background|cite|classid|codebase|data|longdesc|profile|usemap)$/.test(name) ) 
+                               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;