Completely reworked the evalScripts() code, fixing bugs #1332, #975, and #777.
[jquery.git] / src / jquery / jquery.js
index ef728f0..f54ee30 100644 (file)
@@ -565,7 +565,7 @@ jQuery.fn = jQuery.prototype = {
         * @cat DOM/Attributes
         */
        text: function(e) {
-               if ( typeof e == "string" )
+               if ( typeof e != "object" && e != null )
                        return this.empty().append( document.createTextNode( e ) );
 
                var t = "";
@@ -811,7 +811,7 @@ jQuery.fn = jQuery.prototype = {
 
        /**
         * Searches for all elements that match the specified expression.
-        
+        * 
         * This method is a good way to find additional descendant
         * elements with which to process.
         *
@@ -1171,9 +1171,14 @@ jQuery.fn = jQuery.prototype = {
                                obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));
 
                        jQuery.each( a, function(){
-                               fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
+                               if ( jQuery.nodeName(this, "script") ) {
+                                       if ( this.src )
+                                               jQuery.ajax({ url: this.src, async: false, dataType: "script" });
+                                       else
+                                               (new Function( this.text || this.textContent || this.innerHTML || "" ))();
+                               } else
+                                       fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
                        });
-
                });
        }
 };
@@ -1565,7 +1570,16 @@ jQuery.extend({
 
                // IE elem.getAttribute passes even for style
                else if ( elem.tagName ) {
-                       // IE actually uses filters for opacity ... elem is actually elem.style
+                       
+
+                       if ( value != undefined ) elem.setAttribute( name, value );
+                       if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) 
+                               return elem.getAttribute( name, 2 );
+                       return elem.getAttribute( name );
+
+               // elem is actually elem.style ... set the style
+               } else {
+                       // IE actually uses filters for opacity
                        if ( name == "opacity" && jQuery.browser.msie ) {
                                if ( value != undefined ) {
                                        // IE has trouble with opacity if it does not have layout
@@ -1580,14 +1594,6 @@ jQuery.extend({
                                return elem.filter ? 
                                        (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "";
                        }
-
-                       if ( value != undefined ) elem.setAttribute( name, value );
-                       if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) ) 
-                               return elem.getAttribute( name, 2 );
-                       return elem.getAttribute( name );
-
-               // elem is actually elem.style ... set the style
-               } else {
                        name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
                        if ( value != undefined ) elem[name] = value;
                        return elem[name];
@@ -1606,7 +1612,7 @@ jQuery.extend({
         * @cat JavaScript
         */
        trim: function(t){
-               return t.replace(/^\s+|\s+$/g, "");
+               return (t||"").replace(/^\s+|\s+$/g, "");
        },
 
        makeArray: function( a ) {
@@ -1665,11 +1671,15 @@ jQuery.extend({
        unique: function(first) {
                var r = [], num = jQuery.mergeNum++;
 
-               for ( var i = 0, fl = first.length; i < fl; i++ )
-                       if ( num != first[i].mergeNum ) {
-                               first[i].mergeNum = num;
-                               r.push(first[i]);
-                       }
+               try {
+                       for ( var i = 0, fl = first.length; i < fl; i++ )
+                               if ( num != first[i].mergeNum ) {
+                                       first[i].mergeNum = num;
+                                       r.push(first[i]);
+                               }
+               } catch(e) {
+                       r = first;
+               }
 
                return r;
        },
@@ -1810,7 +1820,7 @@ new function() {
 
        // Figure out what browser is being used
        jQuery.browser = {
-               version: b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)[1],
+               version: (b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
                safari: /webkit/.test(b),
                opera: /opera/.test(b),
                msie: /msie/.test(b) && !/opera/.test(b),