Simplified the structure of the .css() and .attr() methods (reducing the number of calls). Need to optimize $.css/$.curCSS/$.attr still. Fixes #4269.
This commit is contained in:
parent
1c8c3883a9
commit
f1f5cd9f6a
56
src/core.js
56
src/core.js
|
@ -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({
|
||||||
// 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({
|
||||||
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({
|
||||||
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() {
|
||||||
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];
|
||||||
|
|
Loading…
Reference in a new issue