"../support"
], function( jQuery, rnotwhite, strundefined ) {
-var nodeHook, boolHook;
+var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle;
jQuery.fn.extend({
attr: function( name, value ) {
}
};
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
-
- jQuery.expr.attrHandle[ name ] = function( elem, name, isXML ) {
- var fn = jQuery.expr.attrHandle[ name ],
- ret = isXML ?
- undefined :
- /* jshint eqeqeq: false */
- // Temporarily disable this handler to check existence
- (jQuery.expr.attrHandle[ name ] = undefined) !=
- getter( elem, name, isXML ) ?
-
- name.toLowerCase() :
- null;
-
- // Restore handler
- jQuery.expr.attrHandle[ name ] = fn;
-
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ name ] = function( elem, name, isXML ) {
+ var ret, handle;
+ if ( !isXML ) {
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[ name ];
+ attrHandle[ name ] = ret;
+ ret = getter( elem, name, isXML ) != null ?
+ name.toLowerCase() :
+ null;
+ attrHandle[ name ] = handle;
+ }
return ret;
};
});
equal( jQuery("#name").attr( "nonexisting", undefined ).attr("nonexisting"), undefined, ".attr('attribute', undefined) does not create attribute (#5571)" );
});
+test( "attr - extending the boolean attrHandle", function() {
+ expect( 1 );
+ var called = false,
+ _handle = jQuery.expr.attrHandle.checked || $.noop;
+ jQuery.expr.attrHandle.checked = function() {
+ called = true;
+ _handle.apply( this, arguments );
+ };
+ jQuery( "input" ).attr( "checked" );
+ called = false;
+ jQuery( "input" ).attr( "checked" );
+ ok( called, "The boolean attrHandle does not drop custom attrHandles" );
+});
+
test( "attr(String, Object) - Loaded via XML document", function() {
expect( 2 );
var xml = createDashboardXML(),