Updated the years on the licensing.
[jquery.git] / src / core.js
index c2f94d2..098d4bd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * jQuery @VERSION - New Wave Javascript
  *
- * Copyright (c) 2007 John Resig (jquery.com)
+ * Copyright (c) 2008 John Resig (jquery.com)
  * Dual licensed under the MIT (MIT-LICENSE.txt)
  * and GPL (GPL-LICENSE.txt) licenses.
  *
@@ -303,11 +303,9 @@ jQuery.fn = jQuery.prototype = {
                                // as properties will not be copied (such as the
                                // the name attribute on an input).
                                var clone = this.cloneNode(true),
-                                       container = document.createElement("div"),
-                                       container2 = document.createElement("div");
+                                       container = document.createElement("div");
                                container.appendChild(clone);
-                               container2.innerHTML = container.innerHTML;
-                               return container2.firstChild;
+                               return jQuery.clean([container.innerHTML])[0];
                        } else
                                return this.cloneNode(true);
                });
@@ -323,6 +321,8 @@ jQuery.fn = jQuery.prototype = {
                // Copy the events from the original to the clone
                if ( events === true )
                        this.find("*").andSelf().each(function(i){
+                               if (this.nodeType == 3)
+                                       return;
                                var events = jQuery.data( this, "events" );
 
                                for ( var type in events )
@@ -597,8 +597,7 @@ jQuery.extend({
                return jQuery;
        },
 
-       // This may seem like some crazy code, but trust me when I say that this
-       // is the only cross-browser way to do this. --John
+       // See test/unit/core.js for details concerning this function.
        isFunction: function( fn ) {
                return !!fn && typeof fn != "string" && !fn.nodeName && 
                        fn.constructor != Array && /function/i.test( fn + "" );
@@ -706,20 +705,22 @@ jQuery.extend({
        // args is for internal usage only
        each: function( object, callback, args ) {
                if ( args ) {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.apply( object[ name ], args );
-                       else
+                                       if ( callback.apply( object[ name ], args ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length; i < length; i++ )
                                        if ( callback.apply( object[ i ], args ) === false )
                                                break;
 
                // A special, fast, case for the most common use of each
                } else {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.call( object[ name ], name, object[ name ] );
-                       else
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length, value = object[0]; 
                                        i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
                }
@@ -835,7 +836,7 @@ jQuery.extend({
                if ( name.match( /float/i ) )
                        name = styleFloat;
 
-               if ( !force && elem.style[ name ] )
+               if ( !force && elem.style && elem.style[ name ] )
                        ret = elem.style[ name ];
 
                else if ( document.defaultView && document.defaultView.getComputedStyle ) {
@@ -932,7 +933,7 @@ jQuery.extend({
                        if ( typeof elem == "string" ) {
                                // Fix "XHTML"-style tags in all browsers
                                elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
-                                       return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area)$/i) ?
+                                       return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
                                                all :
                                                front + "></" + tag + ">";
                                });
@@ -1152,11 +1153,6 @@ jQuery.extend({
        },
 
        grep: function( elems, callback, inv ) {
-               // If a string is passed in for the function, make a function
-               // for it (a handy shortcut)
-               if ( typeof callback == "string" )
-                       callback = eval("false||function(a,i){return " + callback + "}");
-
                var ret = [];
 
                // Go through the array, only saving the items
@@ -1229,18 +1225,16 @@ jQuery.extend({
 });
 
 jQuery.each({
-       parent: "elem.parentNode",
-       parents: "jQuery.dir(elem,'parentNode')",
-       next: "jQuery.nth(elem,2,'nextSibling')",
-       prev: "jQuery.nth(elem,2,'previousSibling')",
-       nextAll: "jQuery.dir(elem,'nextSibling')",
-       prevAll: "jQuery.dir(elem,'previousSibling')",
-       siblings: "jQuery.sibling(elem.parentNode.firstChild,elem)",
-       children: "jQuery.sibling(elem.firstChild)",
-       contents: "jQuery.nodeName(elem,'iframe')?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes)"
+       parent: function(elem){return elem.parentNode;},
+       parents: function(elem){return jQuery.dir(elem,"parentNode");},
+       next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
+       prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
+       nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
+       prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
+       siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
+       children: function(elem){return jQuery.sibling(elem.firstChild);},
+       contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
 }, function(name, fn){
-       fn = eval("false||function(elem){return " + fn + "}");
-
        jQuery.fn[ name ] = function( selector ) {
                var ret = jQuery.map( this, fn );