Fixed an issue with parentNode being accessed in attr() on disconnected DOM elements.
authorJohn Resig <jeresig@gmail.com>
Mon, 12 Jan 2009 14:00:35 +0000 (14:00 +0000)
committerJohn Resig <jeresig@gmail.com>
Mon, 12 Jan 2009 14:00:35 +0000 (14:00 +0000)
src/core.js
test/unit/core.js

index 78f0cae..6c439a5 100644 (file)
@@ -961,7 +961,7 @@ jQuery.extend({
 
                        // Safari mis-reports the default selected property of a hidden option
                        // Accessing the parent's selectedIndex property fixes it
-                       if ( name == "selected" )
+                       if ( name == "selected" && elem.parentNode )
                                elem.parentNode.selectedIndex;
 
                        // If applicable, access the attribute via the DOM 0 way
index 4d04af7..8483361 100644 (file)
@@ -383,7 +383,7 @@ test("index(Object)", function() {
 });
 
 test("attr(String)", function() {
-       expect(26);
+       expect(27);
        equals( jQuery('#text1').attr('value'), "Test", 'Check for value attribute' );
        equals( jQuery('#text1').attr('value', "Test2").attr('defaultValue'), "Test", 'Check for defaultValue attribute' );
        equals( jQuery('#text1').attr('type'), "text", 'Check for type attribute' );
@@ -407,6 +407,8 @@ test("attr(String)", function() {
        jQuery('<a id="tAnchor5"></a>').attr('href', '#5').appendTo('#main'); // using innerHTML in IE causes href attribute to be serialized to the full path
        equals( jQuery('#tAnchor5').attr('href'), "#5", 'Check for non-absolute href (an anchor)' );
 
+       equals( jQuery("<option/>").attr("selected"), false, "Check selected attribute on disconnected element." );
+
 
        // Related to [5574] and [5683]
        var body = document.body, $body = jQuery(body);