]> source.dussan.org Git - jquery.git/commitdiff
2.0: Remove getSetAttribute and getSetInput and oldIE attroperties hooks
authorTimmy Willison <timmywillisn@gmail.com>
Mon, 17 Dec 2012 23:45:13 +0000 (18:45 -0500)
committerRick Waldron <waldron.rick@gmail.com>
Mon, 31 Dec 2012 18:23:32 +0000 (13:23 -0500)
src/attributes.js
src/support.js

index ec39843300d6eeaa867532e83a8d5e7320b26026..a9a016eb86733f9751a96d7a0aa5e1a10257e88a 100644 (file)
@@ -3,10 +3,7 @@ var nodeHook, boolHook,
        rreturn = /\r/g,
        rfocusable = /^(?:input|select|textarea|button|object)$/i,
        rclickable = /^(?:a|area)$/i,
-       rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
-       ruseDefault = /^(?:checked|selected)$/i,
-       getSetAttribute = jQuery.support.getSetAttribute,
-       getSetInput = jQuery.support.input;
+       rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i;
 
 jQuery.fn.extend({
        attr: function( name, value ) {
@@ -349,22 +346,12 @@ jQuery.extend({
                                propName = jQuery.propFix[ name ] || name;
 
                                // Boolean attributes get special treatment (#10870)
+                               // Set corresponding property to false for boolean attributes
                                if ( rboolean.test( name ) ) {
-                                       // Set corresponding property to false for boolean attributes
-                                       // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
-                                       if ( !getSetAttribute && ruseDefault.test( name ) ) {
-                                               elem[ jQuery.camelCase( "default-" + name ) ] =
-                                                       elem[ propName ] = false;
-                                       } else {
-                                               elem[ propName ] = false;
-                                       }
-
-                               // See #9699 for explanation of this approach (setting first, then removal)
-                               } else {
-                                       jQuery.attr( elem, name, "" );
+                                       elem[ propName ] = false;
                                }
 
-                               elem.removeAttribute( getSetAttribute ? name : propName );
+                               elem.removeAttribute( name );
                        }
                }
        },
@@ -456,26 +443,7 @@ jQuery.extend({
 // Hook for boolean attributes
 boolHook = {
        get: function( elem, name ) {
-               var
-                       // Use .prop to determine if this attribute is understood as boolean
-                       prop = jQuery.prop( elem, name ),
-
-                       // Fetch it accordingly
-                       attr = typeof prop === "boolean" && elem.getAttribute( name ),
-                       detail = typeof prop === "boolean" ?
-
-                               getSetInput && getSetAttribute ?
-                                       attr != null :
-                                       // oldIE fabricates an empty string for missing boolean attributes
-                                       // and conflates checked/selected into attroperties
-                                       ruseDefault.test( name ) ?
-                                               elem[ jQuery.camelCase( "default-" + name ) ] :
-                                               !!attr :
-
-                               // fetch an attribute node for properties not recognized as boolean
-                               elem.getAttributeNode( name );
-
-               return detail && detail.value !== false ?
+               return elem.getAttribute( name ) !== null ?
                        name.toLowerCase() :
                        undefined;
        },
@@ -483,96 +451,13 @@ boolHook = {
                if ( value === false ) {
                        // Remove boolean attributes when set to false
                        jQuery.removeAttr( elem, name );
-               } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-                       // IE<8 needs the *property* name
-                       elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-               // Use defaultChecked and defaultSelected for oldIE
                } else {
-                       elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+                       elem.setAttribute( name, name );
                }
-
                return name;
        }
 };
 
-// fix oldIE value attroperty
-if ( !getSetInput || !getSetAttribute ) {
-       jQuery.attrHooks.value = {
-               get: function( elem, name ) {
-                       var ret = elem.getAttributeNode( name );
-                       return jQuery.nodeName( elem, "input" ) ?
-
-                               // Ignore the value *property* by using defaultValue
-                               elem.defaultValue :
-
-                               ret && ret.specified ? ret.value : undefined;
-               },
-               set: function( elem, value, name ) {
-                       if ( jQuery.nodeName( elem, "input" ) ) {
-                               // Does not return so that setAttribute is also used
-                               elem.defaultValue = value;
-                       } else {
-                               // Use nodeHook if defined (#1954); otherwise setAttribute is fine
-                               return nodeHook && nodeHook.set( elem, value, name );
-                       }
-               }
-       };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret = elem.getAttributeNode( name );
-                       return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
-                               ret.value :
-                               undefined;
-               },
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               elem.setAttributeNode(
-                                       (ret = elem.ownerDocument.createAttribute( name ))
-                               );
-                       }
-
-                       ret.value = value += "";
-
-                       // Break association with cloned elements by also using setAttribute (#9646)
-                       return name === "value" || value === elem.getAttribute( name ) ?
-                               value :
-                               undefined;
-               }
-       };
-
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               get: nodeHook.get,
-               set: function( elem, value, name ) {
-                       nodeHook.set( elem, value === "" ? false : value, name );
-               }
-       };
-
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               });
-       });
-}
-
 // Radios and checkboxes getter/setter
 if ( !jQuery.support.checkOn ) {
        jQuery.each([ "radio", "checkbox" ], function() {
index 9d8ed46da01b6ab8dcbf3b2fd2a229c28d6b82df..5e3a7f4ba760263e86ee3a716cc28b282f6bf388 100644 (file)
@@ -80,11 +80,6 @@ jQuery.support = (function() {
                support.deleteExpando = false;
        }
 
-       // Check if we can trust getAttribute("value")
-       input = document.createElement("input");
-       input.setAttribute( "value", "" );
-       support.input = input.getAttribute( "value" ) === "";
-
        // Check if an input maintains its value after becoming a radio
        input.value = "t";
        input.setAttribute( "type", "radio" );