Side navigation
#3058 closed enhancement (invalid)
Opened June 18, 2008 10:29AM UTC
Closed July 23, 2008 04:28PM UTC
Last modified March 14, 2012 09:02PM UTC
$.attr() improvement ?
Reported by: | arachnotech | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 1.3 |
Component: | core | Version: | 1.2.6 |
Keywords: | attr removeAttr | Cc: | |
Blocked by: | Blocking: |
Description
I am wondering why invoking $.attr('testAttribute', null) doesn't remove the 'testAttribute' attribute and sets it to 'null' (string) instead.
I think that it would be clever (but maybe i'm wrong ;-) to allow attribute removal using null values as it is the value natively returned when the attribute doesn't exist.
That way we could remove many attributes with a single attr({...}) call.
The $.attr() function may look like this :
attr: function( elem, name, value ) { // don't set attributes on text and comment nodes if (!elem || elem.nodeType == 3 || elem.nodeType == 8) return undefined; var notxml = !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined, msie = jQuery.browser.msie; // Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name; // Only do all the following if this is a node (faster for style) // IE elem.getAttribute passes even for style if ( elem.tagName ) { // These attributes require special treatment var special = /href|src|style/.test( name ); // Safari mis-reports the default selected property of a hidden option // Accessing the parent's selectedIndex property fixes it if ( name == "selected" && jQuery.browser.safari ) elem.parentNode.selectedIndex; // If applicable, access the attribute via the DOM 0 way if ( name in elem && notxml && !special ) { if ( set ){ // We can't allow the type property to be changed (since it causes problems in IE) if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) throw "type property can't be changed"; elem[ name ] = value; } // browsers index elements by id/name on forms, give priority to attributes. if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) return elem.getAttributeNode( name ).nodeValue; return elem[ name ]; } if ( msie && notxml && name == "style" ) return jQuery.attr( elem.style, "cssText", value ); if ( set ) if(value === null) // removeAttr if value === null elem.removeAttribute(name); else // convert the value to a string (all browsers do this but IE) see #1070 elem.setAttribute( name, "" + value ); var attr = msie && notxml && special // Some attributes require a special call on IE ? elem.getAttribute( name, 2 ) : elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return attr === null ? undefined : attr; } // elem is actually elem.style ... set the style // IE uses filters for opacity if ( msie && name == "opacity" ) { if ( set ) { // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level elem.zoom = 1; // Set the alpha filter to set the opacity elem.filter = (elem.filter || "").replace( /alpha\\([^)]*\\)/, "" ) + (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); } return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': ""; } name = name.replace(/-([a-z])/ig, function(all, letter){ return letter.toUpperCase(); }); if ( set ) elem[ name ] = value; return elem[ name ]; },
Attachments (0)
Change History (4)
Changed July 01, 2008 03:11AM UTC by comment:1
Changed July 01, 2008 03:11AM UTC by comment:2
Ah, also note that we have $().removeAttribute(). So this new functionality seems useless.
Changed July 01, 2008 03:12AM UTC by comment:3
Meant removeAttr... sorry.
Changed July 23, 2008 04:28PM UTC by comment:4
resolution: | → invalid |
---|---|
status: | new → closed |
No need for duplicated functionality, removeAttr should do just fine.
So where's the change ? I can't spot it.
Can you make a diff ? you make a checkout from the trunk, add the modifications (save) and you do (from trunk)
That will generate attr.diff, you need to upload it. Thanks