Commit f1f5cd9f authored by John Resig's avatar John Resig

Simplified the structure of the .css() and .attr() methods (reducing the...

Simplified the structure of the .css() and .attr() methods (reducing the number of calls). Need to optimize $.css/$.curCSS/$.attr still. Fixes #4269.
parent 1c8c3883
...@@ -166,29 +166,42 @@ jQuery.fn = jQuery.prototype = { ...@@ -166,29 +166,42 @@ jQuery.fn = jQuery.prototype = {
}, },
attr: function( name, value, type ) { attr: function( name, value, type ) {
var options = name; var options = name, isFunction = jQuery.isFunction( value );
// Look for the case where we're accessing a style value // Look for the case where we're accessing a style value
if ( typeof name === "string" ) if ( typeof name === "string" ) {
if ( value === undefined ) if ( value === undefined ) {
return this[0] && jQuery[ type || "attr" ]( this[0], name ); return this.length ?
jQuery[ type || "attr" ]( this[0], name ) :
null;
else { } else {
options = {}; options = {};
options[ name ] = value; options[ name ] = value;
} }
}
// Check to see if we're setting style values // Check to see if we're setting style values
return this.each(function(i){ for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
// Set all the styles // Set all the styles
for ( name in options ) for ( var prop in options ) {
jQuery.attr( value = options[prop];
type ?
this.style : if ( isFunction ) {
this, value = value.call( elem, i );
name, jQuery.prop( this, options[ name ], type, i, name ) }
);
}); if ( typeof value === "number" && type === "curCSS" && !exclude.test(prop) ) {
value = value + "px";
}
jQuery.attr( type ? elem.style : elem, prop, value );
}
}
return this;
}, },
css: function( key, value ) { css: function( key, value ) {
...@@ -644,7 +657,7 @@ jQuery.extend({ ...@@ -644,7 +657,7 @@ jQuery.extend({
// check if an element is in a (or is an) XML document // check if an element is in a (or is an) XML document
isXMLDoc: function( elem ) { isXMLDoc: function( elem ) {
return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
}, },
// Evalulates a script in a global context // Evalulates a script in a global context
...@@ -700,17 +713,6 @@ jQuery.extend({ ...@@ -700,17 +713,6 @@ jQuery.extend({
return object; return object;
}, },
prop: function( elem, value, type, i, name ) {
// Handle executable functions
if ( jQuery.isFunction( value ) )
value = value.call( elem, i );
// Handle passing in a number to a CSS property
return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
value + "px" :
value;
},
className: { className: {
// internal only, use addClass("class") // internal only, use addClass("class")
add: function( elem, classNames ) { add: function( elem, classNames ) {
...@@ -974,7 +976,7 @@ jQuery.extend({ ...@@ -974,7 +976,7 @@ jQuery.extend({
if (!elem || elem.nodeType == 3 || elem.nodeType == 8) if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
return undefined; return undefined;
var notxml = !jQuery.isXMLDoc( elem ), var notxml = !elem.tagName || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting) // Whether we are setting (or getting)
set = value !== undefined; set = value !== undefined;
......
...@@ -1688,13 +1688,6 @@ test("jQuery.each(Object,Function)", function() { ...@@ -1688,13 +1688,6 @@ test("jQuery.each(Object,Function)", function() {
equals( total, 3, "Looping over an object, with break" ); equals( total, 3, "Looping over an object, with break" );
}); });
test("jQuery.prop", function() {
expect(2);
var handle = function() { return this.id };
equals( jQuery.prop(jQuery("#ap")[0], handle), "ap", "Check with Function argument" );
equals( jQuery.prop(jQuery("#ap")[0], "value"), "value", "Check with value argument" );
});
test("jQuery.className", function() { test("jQuery.className", function() {
expect(6); expect(6);
var x = jQuery("<p>Hi</p>")[0]; var x = jQuery("<p>Hi</p>")[0];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment