aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/attributes.js27
-rw-r--r--test/unit/attributes.js13
2 files changed, 24 insertions, 16 deletions
diff --git a/src/attributes.js b/src/attributes.js
index b472e617c..ced9977e4 100644
--- a/src/attributes.js
+++ b/src/attributes.js
@@ -276,7 +276,8 @@ jQuery.extend({
attrFix: {
// Always normalize to ensure hook usage
- tabindex: "tabIndex"
+ tabindex: "tabIndex",
+ readonly: "readOnly"
},
attr: function( elem, name, value, pass ) {
@@ -339,10 +340,14 @@ jQuery.extend({
if ( jQuery.support.getSetAttribute ) {
elem.removeAttribute( name );
} else {
- // Set to default empty string (No longer need to use attr for this)
- elem.setAttribute( name, "" );
- // Attempt to remove completely with DOM level 1
- elem.removeAttributeNode( elem.getAttributeNode( name ) );
+ // Only style is a special case.
+ if ( name === "style" ) {
+ elem.style.cssText = "";
+ } else {
+ elem.setAttribute( name, "" );
+ // Attempt to remove completely with DOM level 1
+ elem.removeAttributeNode( elem.getAttributeNode( name ) );
+ }
}
}
},
@@ -415,7 +420,6 @@ if ( !jQuery.support.getSetAttribute ) {
jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
"for": "htmlFor",
"class": "className",
- readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
@@ -447,12 +451,10 @@ if ( !jQuery.support.getSetAttribute ) {
}
// Remove certain attrs if set to false
-jQuery.each([ "selected", "checked", "readonly", "disabled" ], function( i, name ) {
- name = jQuery.attrFix[ name ] || name;
-
+jQuery.each([ "selected", "checked", "readOnly", "disabled" ], function( i, name ) {
jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
set: function( elem, value ) {
- if ( !value ) { // '', undefined, false, null will remove attr
+ if ( !value ) {
jQuery.removeAttr( elem, name );
return false;
}
@@ -472,9 +474,10 @@ if ( !jQuery.support.hrefNormalized ) {
}
if ( !jQuery.support.style ) {
- jQuery.propHooks.style = jQuery.attrHooks.style = {
+ jQuery.attrHooks.style = {
get: function( elem ) {
- return elem.style.cssText;
+ // Return undefined in the case of empty string
+ return elem.style.cssText || undefined;
},
set: function( elem, value ) {
return (elem.style.cssText = "" + value);
diff --git a/test/unit/attributes.js b/test/unit/attributes.js
index ad051649f..0e86a8bf6 100644
--- a/test/unit/attributes.js
+++ b/test/unit/attributes.js
@@ -15,9 +15,9 @@ test("jQuery.attrFix integrity test", function() {
if ( !jQuery.support.getSetAttribute ) {
propsShouldBe = {
tabindex: "tabIndex",
+ readonly: "readOnly",
"for": "htmlFor",
"class": "className",
- readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
@@ -27,7 +27,8 @@ test("jQuery.attrFix integrity test", function() {
};
} else {
propsShouldBe = {
- tabindex: "tabIndex"
+ tabindex: "tabIndex",
+ readonly: "readOnly"
};
}
@@ -172,7 +173,7 @@ test("attr(Hash)", function() {
});
test("attr(String, Object)", function() {
- expect(29);
+ expect(30);
var div = jQuery("div").attr("foo", "bar"),
fail = false;
@@ -195,6 +196,8 @@ test("attr(String, Object)", function() {
equals( jQuery("#name").attr('name'), undefined, 'Remove name attribute' );
jQuery("#check2").attr('checked', true);
equals( document.getElementById('check2').checked, true, 'Set checked attribute' );
+ jQuery("#check2").attr('checked', '');
+ equals( document.getElementById('check2').checked, false, 'Setting checked to empty string removes it' );
jQuery("#check2").attr('checked', false);
equals( document.getElementById('check2').checked, false, 'Set checked attribute' );
jQuery("#text1").attr('readonly', true);
@@ -397,9 +400,11 @@ test("attr('tabindex', value)", function() {
});
test("removeAttr(String)", function() {
- expect(2);
+ expect(4);
equals( jQuery('#mark').removeAttr( "class" )[0].className, "", "remove class" );
equals( jQuery('#form').removeAttr('id').attr('id'), undefined, 'Remove id' );
+ equals( jQuery('#foo').attr('style', 'position:absolute;').removeAttr('style').attr('style'), undefined, 'Check removing style attribute' );
+ equals( jQuery('#form').attr('style', 'position:absolute;').removeAttr('style').attr('style'), undefined, 'Check removing style attribute on a form' );
});
test("removeProp(String)", function() {