Fixed non-unique results from .parent(), .parents(), .next(), etc. (Bug #1449)
[jquery.git] / src / jquery / jquery.js
index 705a5bb..bc4bcd1 100644 (file)
@@ -852,7 +852,7 @@ jQuery.fn = jQuery.prototype = {
         * @cat DOM/Manipulation
         */
        clone: function(deep) {
-               deep = deep != undefined ? deep : true
+               deep = deep != undefined ? deep : true;
                var $this = this.add(this.find("*"));
                if (jQuery.browser.msie) {
                        // Need to remove events on the element and its descendants
@@ -938,7 +938,7 @@ jQuery.fn = jQuery.prototype = {
                return this.pushStack(
                        jQuery.isFunction( t ) &&
                        jQuery.grep(this, function(el, index){
-                               return t.apply(el, [index])
+                               return t.apply(el, [index]);
                        }) ||
 
                        jQuery.multiFilter(t,this) );
@@ -1191,7 +1191,7 @@ jQuery.fn = jQuery.prototype = {
                                        if ( this.src )
                                                jQuery.ajax({ url: this.src, async: false, dataType: "script" });
                                        else
-                                               (new Function( this.text || this.textContent || this.innerHTML || "" ))();
+                                               jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
                                } else
                                        fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
                        });
@@ -1322,6 +1322,21 @@ jQuery.extend({
                        elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
        },
 
+       // Evalulates a script in a global context
+       // Evaluates Async. in Safari 2 :-(
+       globalEval: function( data ) {
+               data = jQuery.trim( data );
+               if ( data ) {
+                       if ( window.execScript )
+                               window.execScript( data );
+                       else if ( jQuery.browser.safari )
+                               // safari doesn't provide a synchronous global eval
+                               window.setTimeout( data, 0 );
+                       else
+                               eval.call( window, data );
+               }
+       },
+
        nodeName: function( elem, name ) {
                return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
        },
@@ -1551,7 +1566,7 @@ jQuery.extend({
                                        !s.indexOf("<leg") &&
                                        [1, "<fieldset>", "</fieldset>"] ||
                                        
-                                       (!s.indexOf("<thead") || !s.indexOf("<tbody") || !s.indexOf("<tfoot") || !s.indexOf("<colg")) &&
+                                       s.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
                                        [1, "<table>", "</table>"] ||
                                        
                                        !s.indexOf("<tr") &&
@@ -1587,7 +1602,11 @@ jQuery.extend({
                                        for ( var n = tb.length-1; n >= 0 ; --n )
                                                if ( jQuery.nodeName(tb[n], "tbody") && !tb[n].childNodes.length )
                                                        tb[n].parentNode.removeChild(tb[n]);
-                                       
+       
+                                       // IE completely kills leading whitespace when innerHTML is used        
+                                       if ( /^\s/.test(arg) )  
+                                               div.insertBefore( doc.createTextNode( arg.match(/^\s*/)[0] ), div.firstChild );
+
                                }
                                
                                arg = jQuery.makeArray( div.childNodes );
@@ -1885,7 +1904,7 @@ new function() {
        // Check to see if the W3C box model is being used
        jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
 
-       jQuery.styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat",
+       jQuery.styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat";
 
        jQuery.props = {
                "for": "htmlFor",
@@ -2054,7 +2073,7 @@ jQuery.each({
                var ret = jQuery.map(this,n);
                if ( a && typeof a == "string" )
                        ret = jQuery.multiFilter(a,ret);
-               return this.pushStack( ret );
+               return this.pushStack( jQuery.unique(ret) );
        };
 });