*/
function jQuery(a,c) {
- // Initalize the extra macro functions
- if ( !jQuery.initDone ) jQuery.init();
-
// Shortcut for document ready (because $(document).each() is silly)
if ( a && a.constructor == Function && jQuery.fn.ready )
return jQuery(document).ready(a);
// Make sure that a selection was provided
a = a || jQuery.context || document;
- /*
- * Handle support for overriding other $() functions. Way too many libraries
- * provide this function to simply ignore it and overwrite it.
- */
- /*
- // Check to see if this is a possible collision case
- if ( jQuery._$ && !c && a.constructor == String &&
-
- // Make sure that the expression is a colliding one
- !/[^a-zA-Z0-9_-]/.test(a) &&
-
- // and that there are no elements that match it
- // (this is the one truly ambiguous case)
- !document.getElementsByTagName(a).length )
-
- // Use the default method, in case it works some voodoo
- return jQuery._$( a );
- */
-
// Watch for when a jQuery object is passed as the selector
if ( a.jquery )
return $( jQuery.merge( a, [] ) );
// Find the matching elements and save them for later
jQuery.find( a, c ) );
+ // See if an extra function was provided
var fn = arguments[ arguments.length - 1 ];
+
+ // If so, execute it in context
if ( fn && fn.constructor == Function )
this.each(fn);
}
// Map over the $ in case of overwrite
-if ( $ )
+if ( typeof $ != "undefined" )
jQuery._$ = $;
// Map the jQuery namespace to the '$' one
* argument representing the position of the element in the matched
* set.
*
- * @example $("img").each(function(){ this.src = "test.jpg"; });
+ * @example $("img").each(function(){
+ * this.src = "test.jpg";
+ * });
+ * @before <img/> <img/>
+ * @result <img src="test.jpg"/> <img src="test.jpg"/>
+ *
+ * @example $("img").each(function(i){
+ * alert( "Image #" + i + " is " + this );
+ * });
* @before <img/> <img/>
* @result <img src="test.jpg"/> <img src="test.jpg"/>
*
* @before <img/>
* @result <img src="test.jpg" alt="Test Image"/>
*
- * @test var div = $("div");
- * div.attr({foo: 'baz', zoo: 'ping'});
- * var pass = true;
- * for ( var i = 0; i < div.size(); i++ ) {
- * if ( div.get(i).foo != "baz" && div.get(i).zoo != "ping" ) pass = false;
- * }
+ * @test var pass = true;
+ * $("div").attr({foo: 'baz', zoo: 'ping'}).each(function(){
+ * if ( this.getAttribute('foo') != "baz" && this.getAttribute('zoo') != "ping" ) pass = false;
+ * });
* ok( pass, "Set Multiple Attributes" );
*
* @name attr
* div.attr("foo", "bar");
* var pass = true;
* for ( var i = 0; i < div.size(); i++ ) {
- * if ( div.get(i).foo != "bar" ) pass = false;
+ * if ( div.get(i).getAttribute('foo') != "bar" ) pass = false;
* }
* ok( pass, "Set Attribute" );
*
* @example $("p").not("#selected")
* @before <p>Hello</p><p id="selected">Hello Again</p>
* @result [ <p>Hello</p> ]
+ * @test cmpOK($("#main > p#ap > a").not("#google").length, "==", 2, ".not")
*
* @name not
* @type jQuery
* @name add
* @type jQuery
* @param Array<Element> els An array of Elements to add
- * @cat jQuery
+ * @cat DOM/Traversing
*/
/**
* @name add
* @type jQuery
* @param Element el An Element to add
- * @cat jQuery
+ * @cat DOM/Traversing
*/
add: function(t) {
return this.pushStack( jQuery.merge( this, t.constructor == String ?
* @member jQuery
* @param {String} expr The expression with which to filter
* @type Boolean
- * @cat jQuery
+ * @cat DOM/Traversing
*/
is: function(expr) {
return expr ? jQuery.filter(expr,this).r.length > 0 : this.length > 0;
jQuery.extend({
/**
- *
- *
* @private
* @name init
* @type undefined
if (jQuery.css(e,"display") != "none") {
oHeight = e.offsetHeight;
oWidth = e.offsetWidth;
- } else
- jQuery.swap( e, { visibility: "hidden", position: "absolute", display: "block" },
- function(){
- oHeight = e.clientHeight;
- oWidth = e.clientWidth;
- });
+ } else {
+ e = $(e.cloneNode(true)).css({
+ visibility: "hidden", position: "absolute", display: "block"
+ }).prependTo("body")[0];
+
+ oHeight = e.clientHeight;
+ oWidth = e.clientWidth;
+
+ e.parentNode.removeChild(e);
+ }
});
return p == "height" ? oHeight : oWidth;
} else if ( p == "opacity" && jQuery.browser.msie )
- return parseFloat( jQuery.curCSS(e,"filter").replace(/[^0-9.]/,"") ) || 1;
+ return parseFloat( jQuery.curCSS(e,"filter").replace(/[^0-9.]/,"") ) || 1;
return jQuery.curCSS( e, p );
},
- curCSS: function(e,p,force) {
- var r;
+ curCSS: function(elem, prop, force) {
+ var ret;
- if (!force && e.style[p])
- r = e.style[p];
- else if (e.currentStyle) {
- var np = p.replace(/\-(\w)/g,function(m,c){return c.toUpperCase()});
- r = e.currentStyle[p] || e.currentStyle[np];
+ if (!force && elem.style[prop]) {
+
+ ret = elem.style[prop];
+
+ } else if (elem.currentStyle) {
+
+ var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase()});
+ ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
+
} else if (document.defaultView && document.defaultView.getComputedStyle) {
- p = p.replace(/([A-Z])/g,"-$1").toLowerCase();
- var s = document.defaultView.getComputedStyle(e,"");
- r = s ? s.getPropertyValue(p) : null;
+
+ prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
+ var cur = document.defaultView.getComputedStyle(elem, null);
+
+ if ( cur )
+ ret = cur.getPropertyValue(prop);
+ else if ( prop == 'display' )
+ ret = 'none';
+ else
+ jQuery.swap(elem, { display: 'block' }, function() {
+ ret = document.defaultView.getComputedStyle(this,null).getPropertyValue(prop);
+ });
+
}
- return r;
+ return ret;
},
clean: function(a) {
odd: "i%2",
// Child Checks
+ "nth-child": "jQuery.sibling(a,m[3]).cur",
"first-child": "jQuery.sibling(a,0).cur",
"last-child": "jQuery.sibling(a,0).last",
"only-child": "jQuery.sibling(a).length==1",
return r;
},
- attr: function(o,a,v){
- if ( a && a.constructor == String ) {
- var fix = {
- "for": "htmlFor",
- "class": "className",
- "float": "cssFloat"
- };
-
- a = (fix[a] && fix[a].replace && fix[a] || a)
- .replace(/-([a-z])/ig,function(z,b){
- return b.toUpperCase();
- });
-
- if ( v != undefined ) {
- o[a] = v;
- if ( o.setAttribute && a != "disabled" )
- o.setAttribute(a,v);
- }
-
- return o[a] || o.getAttribute && o.getAttribute(a) || "";
- } else
- return "";
+ attr: function(elem, name, value){
+ var fix = {
+ "for": "htmlFor",
+ "class": "className",
+ "float": "cssFloat",
+ innerHTML: "innerHTML",
+ className: "className"
+ };
+
+ if ( fix[name] ) {
+ if ( value != undefined ) elem[fix[name]] = value;
+ return elem[fix[name]];
+ } else if ( elem.getAttribute ) {
+ if ( value != undefined ) elem.setAttribute( name, value );
+ return elem.getAttribute( name, 2 );
+ } else {
+ name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
+ if ( value != undefined ) elem[name] = value;
+ return elem[name];
+ }
},
// The regular expressions that power the parsing engine
/**
* Get a set of elements containing the unique ancestors of the matched
- * set of elements.
+ * set of elements (except for the root element).
*
* @example $("span").ancestors()
* @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
/**
* Get a set of elements containing the unique ancestors of the matched
- * set of elements.
+ * set of elements (except for the root element).
*
* @example $("span").ancestors()
* @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
* @param String expr An expression to filter the child Elements with
* @cat DOM/Traversing
*/
- children: "a.childNodes"
+ children: "jQuery.sibling(a.firstChild)"
},
each: {
* @type jQuery
* @cat Effects
*/
- _show: function(){
+ show: function(){
this.style.display = this.oldblock ? this.oldblock : "";
if ( jQuery.css(this,"display") == "none" )
this.style.display = "block";
* @type jQuery
* @cat Effects
*/
- _hide: function(){
+ hide: function(){
this.oldblock = this.oldblock || jQuery.css(this,"display");
if ( this.oldblock == "none" )
this.oldblock = "block";
* @type jQuery
* @cat Effects
*/
- _toggle: function(){
- var d = jQuery.css(this,"display");
- $(this)[ !d || d == "none" ? "show" : "hide" ]();
+ toggle: function(){
+ $(this)[ $(this).is(":hidden") ? "show" : "hide" ].apply( $(this), arguments );
},
/**
* @cat DOM/Manipulation
*/
remove: function(a){
- if ( !a || jQuery.filter( [this], a ).r )
+ if ( !a || jQuery.filter( a, [this] ).r )
this.parentNode.removeChild( this );
},
}
}
};
+
+jQuery.init();