I broke out the ${...} functionality into a separate plugin so that we can develop it further. I left a hook in jquery.js so that this can be done, plus I left in the function() functionality.

This commit is contained in:
John Resig 2007-01-08 01:12:21 +00:00
parent 12e6335339
commit b603ca03c4

29
src/jquery/jquery.js vendored
View File

@ -439,17 +439,15 @@ jQuery.fn = jQuery.prototype = {
for ( var prop in key ) for ( var prop in key )
jQuery.attr( jQuery.attr(
type ? this.style : this, type ? this.style : this,
prop, jQuery.parseSetter(key[prop]) prop, jQuery.prop(this, prop, key[prop], type)
); );
// See if we're setting a single key/value style // See if we're setting a single key/value style
else { else
// convert ${this.property} to function returnung that property
jQuery.attr( jQuery.attr(
type ? this.style : this, type ? this.style : this,
key, jQuery.parseSetter(value) key, jQuery.prop(this, key, value, type)
); );
}
}) : }) :
// Look for the case where we're accessing a style value // Look for the case where we're accessing a style value
@ -1233,6 +1231,12 @@ jQuery.extend({
if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break; if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break;
return obj; return obj;
}, },
prop: function(elem, key, value){
// Handle executable functions
return value.constructor == Function &&
value.call( elem, val ) || value;
},
className: { className: {
add: function( elem, c ){ add: function( elem, c ){
@ -1399,16 +1403,6 @@ jQuery.extend({
return r; return r;
}, },
parseSetter: function(value) {
if( typeof value == "string" && value.charAt(0) == "$" ) {
var m = value.match(/{(.*)}$/);
if ( m && m[1] ) {
value = new Function( "return " + m[1] );
}
}
return value;
},
attr: function(elem, name, value){ attr: function(elem, name, value){
var fix = { var fix = {
"for": "htmlFor", "for": "htmlFor",
@ -1424,11 +1418,6 @@ jQuery.extend({
selected: "selected" selected: "selected"
}; };
// get value if a function is provided
if ( value && typeof value == "function" ) {
value = value.apply( elem );
}
// IE actually uses filters for opacity ... elem is actually elem.style // IE actually uses filters for opacity ... elem is actually elem.style
if ( name == "opacity" && jQuery.browser.msie && value != undefined ) { if ( name == "opacity" && jQuery.browser.msie && value != undefined ) {
// IE has trouble with opacity if it does not have layout // IE has trouble with opacity if it does not have layout