Commit 49f088f2 authored by Anton M's avatar Anton M

Partially revert commit a64dc040.

Removing the conditional was too liberal as now attr() would even work
on plain javascript objects. Keeping a check to make sure it is at least
a DOM Node is appropriate. Using nodeName as in the commit which introduced
the nodeType === 1 check seems plausible.
parent a64dc040
...@@ -205,7 +205,6 @@ jQuery.fn.extend({ ...@@ -205,7 +205,6 @@ jQuery.fn.extend({
if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
return elem.getAttribute("value") === null ? "on" : elem.value; return elem.getAttribute("value") === null ? "on" : elem.value;
} }
// Everything else, we just grab the value // Everything else, we just grab the value
return (elem.value || "").replace(rreturn, ""); return (elem.value || "").replace(rreturn, "");
...@@ -271,7 +270,7 @@ jQuery.extend({ ...@@ -271,7 +270,7 @@ jQuery.extend({
height: true, height: true,
offset: true offset: true
}, },
attr: function( elem, name, value, pass ) { attr: function( elem, name, value, pass ) {
// don't set attributes on text and comment nodes // don't set attributes on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
...@@ -289,88 +288,91 @@ jQuery.extend({ ...@@ -289,88 +288,91 @@ jQuery.extend({
// Try to normalize/fix the name // Try to normalize/fix the name
name = notxml && jQuery.props[ name ] || name; name = notxml && jQuery.props[ name ] || name;
// These attributes require special treatment // Only do all the following if this is a node (faster for style)
var special = rspecialurl.test( name ); if ( elem.nodeName ) {
// These attributes require special treatment
var special = rspecialurl.test( name );
// Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
if ( name === "selected" && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
// Make sure that it also works with optgroups, see #5701
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
// If applicable, access the attribute via the DOM 0 way
// '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 ) {
jQuery.error( "type property can't be changed" );
}
// Safari mis-reports the default selected property of an option if ( value === null ) {
// Accessing the parent's selectedIndex property fixes it if ( elem.nodeType === 1 ) {
if ( name === "selected" && !jQuery.support.optSelected ) { elem.removeAttribute( name );
var parent = elem.parentNode; }
if ( parent ) {
parent.selectedIndex;
// Make sure that it also works with optgroups, see #5701 } else {
if ( parent.parentNode ) { elem[ name ] = value;
parent.parentNode.selectedIndex; }
} }
}
}
// If applicable, access the attribute via the DOM 0 way // browsers index elements by id/name on forms, give priority to attributes.
// 'in' checks fail in Blackberry 4.7 #6931 if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { return elem.getAttributeNode( name ).nodeValue;
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 ) {
jQuery.error( "type property can't be changed" );
} }
if ( value === null ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
if ( elem.nodeType === 1 ) { // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
elem.removeAttribute( name ); if ( name === "tabIndex" ) {
} var attributeNode = elem.getAttributeNode( "tabIndex" );
} else { return attributeNode && attributeNode.specified ?
elem[ name ] = value; attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
} }
}
// browsers index elements by id/name on forms, give priority to attributes. return elem[ name ];
if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
return elem.getAttributeNode( name ).nodeValue;
} }
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set if ( !jQuery.support.style && notxml && name === "style" ) {
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ if ( set ) {
if ( name === "tabIndex" ) { elem.style.cssText = "" + value;
var attributeNode = elem.getAttributeNode( "tabIndex" ); }
return attributeNode && attributeNode.specified ? return elem.style.cssText;
attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
} }
return elem[ name ];
}
if ( !jQuery.support.style && notxml && name === "style" ) {
if ( set ) { if ( set ) {
elem.style.cssText = "" + value; // convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, "" + value );
} }
return elem.style.cssText; // Ensure that missing attributes return undefined
} // Blackberry 4.7 returns "" from getAttribute #6938
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
return undefined;
}
if ( set ) { var attr = !jQuery.support.hrefNormalized && notxml && special ?
// convert the value to a string (all browsers do this but IE) see #1070 // Some attributes require a special call on IE
elem.setAttribute( name, "" + value ); elem.getAttribute( name, 2 ) :
} elem.getAttribute( name );
// Ensure that missing attributes return undefined // Non-existent attributes return null, we normalize to undefined
// Blackberry 4.7 returns "" from getAttribute #6938 return attr === null ? undefined : attr;
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
return undefined;
} }
var attr = !jQuery.support.hrefNormalized && 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;
} }
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment