From 4baa213d881a71ffd8557bc587f81d0bc606d63c Mon Sep 17 00:00:00 2001 From: timmywil Date: Fri, 11 Mar 2011 14:51:57 -0500 Subject: [PATCH] First proposed solution for IE6/7 get/setAttribute quirks. Needs more testing, but solves some issues --- src/attributes.js | 39 ++++++++++++++++++++++++++++++--------- src/support.js | 5 ++++- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index 83d02e21..ee4dc1ba 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -275,12 +275,6 @@ jQuery.extend({ offset: true }, - // TODO: Check to see if any of these are needed anymore? - // If not, it may be good to standardize on all-lowercase names instead - attrFix: { - - }, - attr: function( elem, name, value, pass ) { // don't get/set attributes on text, comment and attribute nodes @@ -342,7 +336,7 @@ jQuery.extend({ // Look for the name in elem.attributes.name var attrs = elem.attributes, i = 0, len = attrs.length; for ( ; i < len; i++ ) { - if ( attrs[i]["name"] === name ) { + if ( attrs[i].name === name ) { return true; } } @@ -455,7 +449,7 @@ if ( !jQuery.support.style ) { // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { - + jQuery.propHooks.selected = { get: function( elem ) { var parent = elem.parentNode; @@ -475,4 +469,31 @@ if ( !jQuery.support.optSelected ) { }; } -})( jQuery ); +// IE6/7 do not support getting/setting some attributes with get/setAttribute + +if ( jQuery.support.attrFix ) { + var attrFix = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" + }; + + jQuery.each(attrFix, function( key, name ) { + jQuery.attrHooks[ key ] = jQuery.extend( jQuery.attrHooks[ key ], { + get: function( elem ) { + return elem.getAttribute( name ); + }, + set: function( elem, value ) { + elem.setAttribute( name, value ); + return value; + } + }); + }); +} \ No newline at end of file diff --git a/src/support.js b/src/support.js index 4c309562..3ca28d20 100644 --- a/src/support.js +++ b/src/support.js @@ -7,8 +7,9 @@ var div = document.createElement("div"); div.style.display = "none"; + div.setAttribute("className", "t"); div.innerHTML = "
a"; - + var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0], select = document.createElement("select"), @@ -58,6 +59,8 @@ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, + attrFix: div.getAttribute("className") === "t", + // Will be defined later deleteExpando: true, optDisabled: false,