+(function( jQuery ) {
+
var rclass = /[\n\t]/g,
- rspace = /\s+/,
+ rspaces = /\s+/,
rreturn = /\r/g,
- rspecialurl = /href|src|style/,
- rtype = /(button|input)/i,
- rfocusable = /(button|input|object|select|textarea)/i,
- rclickable = /^(a|area)$/i,
- rradiocheck = /radio|checkbox/;
+ rspecialurl = /^(?:href|src|style)$/,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rradiocheck = /^(?:radio|checkbox)$/i;
jQuery.fn.extend({
attr: function( name, value ) {
- return access( this, name, value, true, jQuery.attr );
+ return jQuery.access( this, name, value, true, jQuery.attr );
},
- removeAttr: function( name ) {
- if ( jQuery.isFunction( name ) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.removeAttr( name.call(this, i, self.attr(name)) );
- });
- }
-
+ removeAttr: function( name, fn ) {
return this.each(function(){
jQuery.attr( this, name, "" );
if ( this.nodeType === 1 ) {
}
if ( value && typeof value === "string" ) {
- var classNames = (value || "").split( rspace );
+ var classNames = (value || "").split( rspaces );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
elem.className = value;
} else {
- var className = " " + elem.className + " ";
+ var className = " " + elem.className + " ", setClass = elem.className;
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
- elem.className += " " + classNames[c];
+ setClass += " " + classNames[c];
}
}
+ elem.className = jQuery.trim( setClass );
}
}
}
}
if ( (value && typeof value === "string") || value === undefined ) {
- var classNames = (value || "").split(rspace);
+ var classNames = (value || "").split( rspaces );
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
- elem.className = className.substring(1, className.length - 1);
+ elem.className = jQuery.trim( className );
} else {
elem.className = "";
return this;
},
- toggleClass: function( classNames, state ) {
- var type = typeof classNames;
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value, isBool = typeof stateVal === "boolean";
- if ( jQuery.isFunction( classNames ) ) {
+ if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
- self.toggleClass( classNames.call(this, i, self.attr("class")), state );
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
});
}
- return this.each(function(){
+ return this.each(function() {
if ( type === "string" ) {
// toggle individual class names
- var isBool = typeof state === "boolean", className, i = 0,
- classNames = classNames.split( rspace );
+ var className, i = 0, self = jQuery(this),
+ state = stateVal,
+ classNames = value.split( rspaces );
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
- state = isBool ? state : !jQuery(this).hasClass( className );
- jQuery(this)[ state ? "addClass" : "removeClass" ]( className );
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
}
} else if ( type === "undefined" || type === "boolean" ) {
}
// toggle whole className
- this.className = this.className || classNames === false ? "" : jQuery.data( this, "__className__" ) || "";
+ this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
}
});
},
if ( elem ) {
if ( jQuery.nodeName( elem, "option" ) ) {
- return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
}
// We need to handle select boxes special
return undefined;
}
- // Typecast once if the value is a number
- if ( typeof value === "number" ) {
- value += "";
- }
-
- var val = value;
+ var isFunction = jQuery.isFunction(value);
return this.each(function(i) {
- var self = jQuery(this);
+ var self = jQuery(this), val = value;
- if ( jQuery.isFunction(value) ) {
- val = value.call(this, i, self.val());
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
- // Typecast each time if the value is a Function and the appended
- // value is therefore different each time.
- if ( typeof val === "number" ) {
- val += "";
- }
+ if ( isFunction ) {
+ val = value.call(this, i, self.val());
}
- if ( this.nodeType !== 1 ) {
- return;
+ // Typecast each time if the value is a Function and the appended
+ // value is therefore different each time.
+ if ( typeof val === "number" ) {
+ val += "";
}
if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
var values = jQuery.makeArray(val);
jQuery( "option", this ).each(function() {
- this.selected = jQuery.inArray( self.val(), values ) >= 0;
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
if ( !values.length ) {
}
// If applicable, access the attribute via the DOM 0 way
- if ( name in elem && notxml && !special ) {
+ // 'in' checks fail in Blackberry 4.7 #6931
+ if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
if ( set ) {
// We can't allow the type property to be changed (since it causes problems in IE)
if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
- throw "type property can't be changed";
+ jQuery.error( "type property can't be changed" );
}
elem[ name ] = value;
elem.setAttribute( name, "" + value );
}
+ // Ensure that missing attributes return undefined
+ // Blackberry 4.7 returns "" from getAttribute #6938
+ if ( !elem.attributes[ name ] && !elem.hasAttribute( name ) ) {
+ return undefined;
+ }
+
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
-
- // elem is actually elem.style ... set the style
- // Using attr for specific style information is now deprecated. Use style insead.
- return jQuery.style( elem, name, value );
}
});
+
+})( jQuery );