From cc9dbd06e5ffa62223e1f2e3dbbdcbbcb2bf5e11 Mon Sep 17 00:00:00 2001 From: Anton M Date: Tue, 7 Dec 2010 03:17:42 +0100 Subject: [PATCH] Fix attr() problems in IE with attribute nodes. Followup to commit b50f41a2. IE can't add properties on an attribute-node element, thus we handle it like text-/comment-nodes. --- src/attributes.js | 4 ++-- test/unit/attributes.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index b0e3601..78b1bfd 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -272,8 +272,8 @@ jQuery.extend({ }, attr: function( elem, name, value, pass ) { - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { return undefined; } diff --git a/test/unit/attributes.js b/test/unit/attributes.js index d17653d..1a7c79b 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -146,12 +146,12 @@ test("attr(String, Object)", function() { commentNode = document.createComment("some comment"), textNode = document.createTextNode("some text"), obj = {}; - jQuery.each( [document, attributeNode, obj, "#firstp"], function( i, ele ) { + jQuery.each( [document, obj, "#firstp"], function( i, ele ) { var $ele = jQuery( ele ); $ele.attr( "nonexisting", "foo" ); equal( $ele.attr("nonexisting"), "foo", "attr(name, value) works correctly for non existing attributes (bug #7500)." ); }); - jQuery.each( [commentNode, textNode], function( i, ele ) { + jQuery.each( [commentNode, textNode, attributeNode], function( i, ele ) { var $ele = jQuery( ele ); $ele.attr( "nonexisting", "foo" ); strictEqual( $ele.attr("nonexisting"), undefined, "attr(name, value) works correctly on comment and text nodes (bug #7500)." ); @@ -341,12 +341,12 @@ test("removeAttr(String)", function() { //removeAttr only really removes on DOM element nodes handle all other seperatyl strictEqual( jQuery( "#firstp" ).attr( "nonexisting", "foo" ).removeAttr( "nonexisting" )[0].nonexisting, undefined, "removeAttr works correctly on DOM element nodes" ); - jQuery.each( [document, attributeNode, obj], function( i, ele ) { + jQuery.each( [document, obj], function( i, ele ) { var $ele = jQuery( ele ); $ele.attr( "nonexisting", "foo" ).removeAttr( "nonexisting" ); strictEqual( ele.nonexisting, "", "removeAttr works correctly on non DOM element nodes (bug #7500)." ); }); - jQuery.each( [commentNode, textNode], function( i, ele ) { + jQuery.each( [commentNode, textNode, attributeNode], function( i, ele ) { $ele = jQuery( ele ); $ele.attr( "nonexisting", "foo" ).removeAttr( "nonexisting" ); strictEqual( ele.nonexisting, undefined, "removeAttr works correctly on non DOM element nodes (bug #7500)." ); -- 1.7.10.4