From c7c067723006b0dfbb123c1a36885580a587d091 Mon Sep 17 00:00:00 2001 From: John Resig Date: Tue, 28 Sep 2010 11:12:13 -0400 Subject: [PATCH] Make .attr(name, null) equivalent to removeAttr(name). (Was roughly this before - but is now consistent across platforms). Fixes #6341. --- src/attributes.js | 9 ++++++++- test/unit/attributes.js | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index cb9f2cf..ec4841b 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -295,7 +295,14 @@ jQuery.extend({ jQuery.error( "type property can't be changed" ); } - elem[ name ] = value; + if ( value === null ) { + if ( elem.nodeType === 1 ) { + elem.removeAttribute( name ); + } + + } else { + elem[ name ] = value; + } } // browsers index elements by id/name on forms, give priority to attributes. diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 3326dfe..de7754b 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -98,15 +98,18 @@ test("attr(Hash)", function() { }); test("attr(String, Object)", function() { - expect(23); + expect(24); + var div = jQuery("div").attr("foo", "bar"), fail = false; + for ( var i = 0; i < div.size(); i++ ) { if ( div.get(i).getAttribute('foo') != "bar" ){ fail = i; break; } } + equals( fail, false, "Set Attribute, the #"+fail+" element didn't get the attribute 'foo'" ); // Fails on IE since recent changes to .attr() @@ -114,6 +117,8 @@ test("attr(String, Object)", function() { jQuery("#name").attr('name', 'something'); equals( jQuery("#name").attr('name'), 'something', 'Set name attribute' ); + jQuery("#name").attr('name', null); + equals( jQuery("#name").attr('title'), '', 'Remove name attribute' ); jQuery("#check2").attr('checked', true); equals( document.getElementById('check2').checked, true, 'Set checked attribute' ); jQuery("#check2").attr('checked', false); -- 1.7.10.4