Restrict the attr quick setters to only methods that specifically ask for the functionality. Fixes #5612.

This commit is contained in:
John Resig 2009-12-09 21:28:33 -08:00
parent 1a4d1904ae
commit f25eedf32a
2 changed files with 20 additions and 1 deletions

View file

@ -200,12 +200,27 @@ jQuery.each({
});
jQuery.extend({
attrFn: {
val: true,
addClass: true,
css: true,
html: true,
text: true,
append: true,
prepend: true,
data: true,
width: true,
height: true,
offset: true
},
attr: function( elem, name, value ) {
// don't set attributes on text and comment nodes
if (!elem || elem.nodeType == 3 || elem.nodeType == 8) {
return undefined;
}
if ( name in jQuery.fn && name !== "attr" ) {
if ( name in jQuery.attrFn ) {
return jQuery(elem)[name](value);
}

View file

@ -885,6 +885,10 @@ jQuery.each( ("blur focus load resize scroll unload click dblclick " +
jQuery.fn[ name ] = function( fn ) {
return fn ? this.bind( name, fn ) : this.trigger( name );
};
if ( jQuery.fnAttr ) {
jQuery.fnAttr[ name ] = true;
}
});
// Prevent memory leaks in IE