X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcss.js;h=94a021b6ab48b3047057a5ac009b481ca1b4024d;hb=89dc1e01435ebeef173c9a843096cd5c1fbc9dd8;hp=9551bc949e98c856c6a764d658f37761ce5a328b;hpb=d7d908b05a442745c1a90728805b74db0a7921cf;p=jquery.git diff --git a/src/css.js b/src/css.js index 9551bc9..94a021b 100644 --- a/src/css.js +++ b/src/css.js @@ -1,17 +1,13 @@ // exclude the following css properties to add px var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, + // cache check for defaultView.getComputedStyle + getComputedStyle = document.defaultView && document.defaultView.getComputedStyle, // normalize float css property styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat"; jQuery.fn.css = function( name, value ) { var options = name, isFunction = jQuery.isFunction( value ); - // ignore negative width and height values - if ( (name == 'width' || name == 'height') && parseFloat(value) < 0 ) - value = undefined; - if ( typeof name === "string" ) { // Are we setting the style? if ( value === undefined ) { @@ -25,6 +21,13 @@ jQuery.fn.css = function( name, value ) { options[ name ] = value; } } + + var isFunction = {}; + + // For each value, determine whether it's a Function so we don't + // need to determine it again for each element + for ( var prop in options ) + isFunction[prop] = jQuery.isFunction( options[prop] ); // For each element... for ( var i = 0, l = this.length; i < l; i++ ) { @@ -34,9 +37,7 @@ jQuery.fn.css = function( name, value ) { for ( var prop in options ) { value = options[prop]; - if ( isFunction ) { - value = value.call( elem, i ); - } + if ( isFunction[prop] ) value = value.call( elem, i ); if ( typeof value === "number" && !exclude.test(prop) ) { value = value + "px"; @@ -55,6 +56,10 @@ jQuery.extend({ if (!elem || elem.nodeType == 3 || elem.nodeType == 8) return undefined; + // ignore negative width and height values #1599 + if ( (name == 'width' || name == 'height') && parseFloat(value) < 0 ) + value = undefined; + var style = elem.style || elem, set = value !== undefined; // IE uses filters for opacity @@ -120,12 +125,12 @@ jQuery.extend({ }, curCSS: function( elem, name, force ) { - var ret, style = elem.style; + var ret, style = elem.style, filter; // IE uses filters for opacity - if ( !jQuery.support.opacity && name == "opacity" ) { - ret = style.filter && style.filter.indexOf("opacity=") >= 0 ? - (parseFloat( style.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': + if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) { + ret = (elem.currentStyle.filter || "").match(/opacity=([^)]*)/) ? + (parseFloat(RegExp.$1) / 100) + "" : ""; return ret === "" ? @@ -140,7 +145,7 @@ jQuery.extend({ if ( !force && style && style[ name ] ) { ret = style[ name ]; - } else if ( defaultView.getComputedStyle ) { + } else if ( getComputedStyle ) { // Only "float" is needed here if ( /float/i.test( name ) ) @@ -148,7 +153,7 @@ jQuery.extend({ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - var computedStyle = defaultView.getComputedStyle( elem, null ); + var computedStyle = elem.ownerDocument.defaultView.getComputedStyle( elem, null ); if ( computedStyle ) ret = computedStyle.getPropertyValue( name );