A follow-up to [6578] (which stopped adding expandos to elements that didn't have...
[jquery.git] / src / core.js
index 45eaecf..ed1f7d5 100644 (file)
@@ -52,11 +52,6 @@ jQuery.fn = jQuery.prototype = {
                        return this;
                }
 
-               // $("body"): Shortcut for quickly finding the body element
-               if ( selector === "body" && !context && document.body ) {
-                       selector = document.body;
-               }
-
                // Handle $(DOMElement)
                if ( selector.nodeType ) {
                        this.context = this[0] = selector;
@@ -112,6 +107,7 @@ jQuery.fn = jQuery.prototype = {
                        // HANDLE: $("TAG")
                        } else if ( !context && /^\w+$/.test( selector ) ) {
                                this.selector = selector;
+                               this.context = document;
                                selector = document.getElementsByTagName( selector );
 
                        // HANDLE: $(expr, $(...))
@@ -466,25 +462,6 @@ jQuery.extend({
                return first;
        },
 
-       unique: function( array ) {
-               var ret = [], done = {}, id;
-
-               try {
-                       for ( var i = 0, length = array.length; i < length; i++ ) {
-                               id = jQuery.data( array[ i ] );
-
-                               if ( !done[ id ] ) {
-                                       done[ id ] = true;
-                                       ret.push( array[ i ] );
-                               }
-                       }
-               } catch( e ) {
-                       ret = array;
-               }
-
-               return ret;
-       },
-
        grep: function( elems, callback, inv ) {
                var ret = [];
 
@@ -552,6 +529,36 @@ function evalScript( i, elem ) {
        }
 }
 
+// Mutifunctional method to get and set values to a collection
+// The value/s can be optionally by executed if its a function
+function access( elems, key, value, exec, fn ) {
+       var l = elems.length;
+       
+       // Setting many attributes
+       if ( typeof key === "object" ) {
+                       for (var k in key) {
+                               access(elems, k, key[k], exec, fn);
+                       }
+               return elems;
+       }
+       
+       // Setting one attribute
+       if (value !== undefined) {
+               // Optionally, function values get executed if exec is true
+               exec = exec && jQuery.isFunction(value);
+               
+               for (var i = 0; i < l; i++) {
+                       var elem = elems[i],
+                               val = exec ? value.call(elem, i) : value;
+                       fn(elem, key, val);
+               }
+               return elems;
+       }
+       
+       // Getting an attribute
+       return l ? fn(elems[0], key) : null;
+}
+
 function now() {
        return (new Date).getTime();
 }