Implemented #753
This commit is contained in:
parent
e1e47cddd6
commit
cb0250f1fa
2 changed files with 49 additions and 4 deletions
6
src/jquery/coreTest.js
vendored
6
src/jquery/coreTest.js
vendored
|
@ -67,9 +67,13 @@ test("attr(String)", function() {
|
||||||
ok( $('#form').attr('action').indexOf("formaction") >= 0, 'Check for action attribute' );
|
ok( $('#form').attr('action').indexOf("formaction") >= 0, 'Check for action attribute' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test("attr(String, Function)", function() {
|
test("attr(String, Function|String)", function() {
|
||||||
ok( $('#text1').attr('value', function() { return this.id })[0].value == "text1", "Set value from id" );
|
ok( $('#text1').attr('value', function() { return this.id })[0].value == "text1", "Set value from id" );
|
||||||
ok( $('#text2').attr('value', "${this.id}")[0].value == "text2", "Set value from id" );
|
ok( $('#text2').attr('value', "${this.id}")[0].value == "text2", "Set value from id" );
|
||||||
|
reset();
|
||||||
|
$('#text1, #text2').attr({value: "${this.id + 'foobar'}"});
|
||||||
|
ok( $('#text1')[0].value == "text1foobar", "Set value from id" );
|
||||||
|
ok( $('#text2')[0].value == "text2foobar", "Set value from id" );
|
||||||
});
|
});
|
||||||
|
|
||||||
test("attr(Hash)", function() {
|
test("attr(Hash)", function() {
|
||||||
|
|
47
src/jquery/jquery.js
vendored
47
src/jquery/jquery.js
vendored
|
@ -388,6 +388,8 @@ jQuery.fn = jQuery.prototype = {
|
||||||
/**
|
/**
|
||||||
* Set a single property to a value, on all matched elements.
|
* Set a single property to a value, on all matched elements.
|
||||||
*
|
*
|
||||||
|
* Can compute values provided as ${formula}, see second example.
|
||||||
|
*
|
||||||
* Note that you can't set the name property of input elements in IE.
|
* Note that you can't set the name property of input elements in IE.
|
||||||
* Use $(html) or .append(html) or .html(html) to create elements
|
* Use $(html) or .append(html) or .html(html) to create elements
|
||||||
* on the fly including the name property.
|
* on the fly including the name property.
|
||||||
|
@ -397,12 +399,34 @@ jQuery.fn = jQuery.prototype = {
|
||||||
* @result <img src="test.jpg"/>
|
* @result <img src="test.jpg"/>
|
||||||
* @desc Sets src attribute to all images.
|
* @desc Sets src attribute to all images.
|
||||||
*
|
*
|
||||||
|
* @example $("img").attr("title", "${this.src}");
|
||||||
|
* @before <img src="test.jpg" />
|
||||||
|
* @result <img src="test.jpg" title="test.jpg" />
|
||||||
|
* @desc Sets title attribute from src attribute, a shortcut for attr(String,Function)
|
||||||
|
*
|
||||||
* @name attr
|
* @name attr
|
||||||
* @type jQuery
|
* @type jQuery
|
||||||
* @param String key The name of the property to set.
|
* @param String key The name of the property to set.
|
||||||
* @param Object value The value to set the property to.
|
* @param Object value The value to set the property to.
|
||||||
* @cat DOM/Attributes
|
* @cat DOM/Attributes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a single property to a computed value, on all matched elements.
|
||||||
|
*
|
||||||
|
* Instead of a value, a function is provided, that computes the value.
|
||||||
|
*
|
||||||
|
* @example $("img").attr("title", function() { return this.src });
|
||||||
|
* @before <img src="test.jpg" />
|
||||||
|
* @result <img src="test.jpg" title="test.jpg" />
|
||||||
|
* @desc Sets title attribute from src attribute.
|
||||||
|
*
|
||||||
|
* @name attr
|
||||||
|
* @type jQuery
|
||||||
|
* @param String key The name of the property to set.
|
||||||
|
* @param Function value A function returning the value to set.
|
||||||
|
* @cat DOM/Attributes
|
||||||
|
*/
|
||||||
attr: function( key, value, type ) {
|
attr: function( key, value, type ) {
|
||||||
// Check to see if we're setting style values
|
// Check to see if we're setting style values
|
||||||
return typeof key != "string" || value != undefined ?
|
return typeof key != "string" || value != undefined ?
|
||||||
|
@ -413,15 +437,17 @@ 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, key[prop]
|
prop, jQuery.parseSetter(key[prop])
|
||||||
);
|
);
|
||||||
|
|
||||||
// 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, value
|
key, jQuery.parseSetter(value)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}) :
|
}) :
|
||||||
|
|
||||||
// Look for the case where we're accessing a style value
|
// Look for the case where we're accessing a style value
|
||||||
|
@ -1363,6 +1389,16 @@ jQuery.extend({
|
||||||
return r;
|
return r;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
parseSetter: function(value) {
|
||||||
|
if( typeof value == "string" && value[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",
|
||||||
|
@ -1378,6 +1414,11 @@ 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
|
||||||
|
|
Loading…
Reference in a new issue