Added a fix for IE returning comment nodes in * queries. I put the logic in $.merge...
authorJohn Resig <jeresig@gmail.com>
Sun, 19 Aug 2007 07:28:41 +0000 (07:28 +0000)
committerJohn Resig <jeresig@gmail.com>
Sun, 19 Aug 2007 07:28:41 +0000 (07:28 +0000)
src/jquery/jquery.js
src/selector/selectorTest.js

index 8420525..98cbf37 100644 (file)
@@ -1725,8 +1725,17 @@ jQuery.extend({
        merge: function(first, second) {
                // We have to loop this way because IE & Opera overwrite the length
                // expando of getElementsByTagName
-               for ( var i = 0; second[i]; i++ )
-                       first.push(second[i]);
+
+               // Also, we need to make sure that the correct elements are being returned
+               // (IE returns comment nodes in a '*' query)
+               if ( jQuery.browser.msie ) {
+                       for ( var i = 0; second[i]; i++ )
+                               if ( second[i].nodeType != 8 )
+                                       first.push(second[i]);
+               } else
+                       for ( var i = 0; second[i]; i++ )
+                               first.push(second[i]);
+
                return first;
        },
 
index ac07bf3..7644fbe 100644 (file)
@@ -1,8 +1,13 @@
 module("selector");
 
 test("element", function() {
-       expect(8);
+       expect(9);
        ok( $("*").size() >= 30, "Select all" );
+       var all = $("*"), good = true;
+       for ( var i = 0; i < all.length; i++ )
+               if ( all[i].nodeType == 8 )
+                       good = false;
+       ok( good, "Select all elements, no comment nodes" );
        t( "Element Selector", "p", ["firstp","ap","sndp","en","sap","first"] );
        t( "Element Selector", "body", ["body"] );
        t( "Element Selector", "html", ["html"] );