* jQuery - New Wave Javascript
*
* Copyright (c) 2006 John Resig (jquery.com)
- * Licensed under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
*
* $Date$
* $Rev$
each: function( fn, args ) {
return jQuery.each( this, fn, args );
},
+
+ index: function( obj ) {
+ var pos = -1;
+ this.each(function(i){
+ if ( this == obj ) pos = i;
+ });
+ return pos;
+ },
/**
* Access a property on the first matched element.
* @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" );
*
new RegExp("(^|\\s*\\b[^-])"+c+"($|\\b(?=[^-]))", "g"), "");
},
has: function(e,a) {
- if ( e.className )
+ if ( e.className != undefined )
e = e.className;
return new RegExp("(^|\\s)" + a + "(\\s|$)").test(e);
}
oHeight = e.offsetHeight;
oWidth = e.offsetWidth;
} else
- jQuery.swap( e, { visibility: "hidden", position: "absolute", display: "" },
+ jQuery.swap( e, { visibility: "hidden", position: "absolute", display: "block" },
function(){
oHeight = e.clientHeight;
oWidth = e.clientWidth;
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) {
- p = p.replace(/\-(\w)/g,function(m,c){return c.toUpperCase()});
- r = e.currentStyle[p];
+ 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[np];
+
} 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) {
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
* @type Array<Element>
* @param Element elem The element to find the ancestors of.
*/
- parents: function(a){
- var b = [];
- var c = a.parentNode;
- while ( c && c != document ) {
- b.push( c );
- c = c.parentNode;
+ parents: function( elem ){
+ var matched = [];
+ var cur = elem.parentNode;
+ while ( cur && cur != document ) {
+ matched.push( cur );
+ cur = cur.parentNode;
}
- return b;
+ return matched;
},
/**
* @type Array
* @param Element elem The element to find all the siblings of (including itself).
*/
- sibling: function(a,n) {
- var type = [];
- var tmp = a.parentNode.childNodes;
- for ( var i = 0; i < tmp.length; i++ ) {
- if ( tmp[i].nodeType == 1 )
- type.push( tmp[i] );
- if ( tmp[i] == a )
- type.n = type.length - 1;
+ sibling: function(elem, pos, not) {
+ var elems = [];
+
+ var siblings = elem.parentNode.childNodes;
+ for ( var i = 0; i < siblings.length; i++ ) {
+ if ( not === true && siblings[i] == elem ) continue;
+
+ if ( siblings[i].nodeType == 1 )
+ elems.push( siblings[i] );
+ if ( siblings[i] == elem )
+ elems.n = elems.length - 1;
}
- type.last = type.n == type.length - 1;
- type.cur =
- n == "even" && type.n % 2 == 0 ||
- n == "odd" && type.n % 2 ||
- type[n] == a;
- type.prev = type[type.n - 1];
- type.next = type[type.n + 1];
- return type;
+
+ return jQuery.extend( elems, {
+ last: elems.n == elems.length - 1,
+ cur: pos == "even" && elems.n % 2 == 0 || pos == "odd" && elems.n % 2 || elems[pos] == elem,
+ prev: elems[elems.n - 1],
+ next: elems[elems.n + 1]
+ });
},
/**
* @param Array a The first array to merge.
* @param Array b The second array to merge.
*/
- merge: function(a,b) {
- var d = [];
+ merge: function(first, second) {
+ var result = [];
// Move b over to the new array (this helps to avoid
// StaticNodeList instances)
- for ( var k = 0; k < a.length; k++ )
- d[k] = a[k];
+ for ( var k = 0; k < first.length; k++ )
+ result[k] = first[k];
// Now check for duplicates between a and b and only
// add the unique items
- for ( var i = 0; i < b.length; i++ ) {
- var c = true;
+ for ( var i = 0; i < second.length; i++ ) {
+ var noCollision = true;
// The collision-checking process
- for ( var j = 0; j < a.length; j++ )
- if ( b[i] == a[j] )
- c = false;
+ for ( var j = 0; j < first.length; j++ )
+ if ( second[i] == first[j] )
+ noCollision = false;
// If the item is unique, add it
- if ( c )
- d.push( b[i] );
+ if ( noCollision )
+ result.push( second[i] );
}
- return d;
+ return result;
},
/**
* @param Function fn The function to process each item against.
* @param Boolean inv Invert the selection - select the opposite of the function.
*/
- grep: function(a,f,s) {
+ grep: function(elems, fn, inv) {
// If a string is passed in for the function, make a function
// for it (a handy shortcut)
- if ( f.constructor == String )
- f = new Function("a","i","return " + f);
+ if ( fn.constructor == String )
+ fn = new Function("a","i","return " + fn);
- var r = [];
+ var result = [];
// Go through the array, only saving the items
// that pass the validator function
- for ( var i = 0; i < a.length; i++ )
- if ( !s && f(a[i],i) || s && !f(a[i],i) )
- r.push( a[i] );
+ for ( var i = 0; i < elems.length; i++ )
+ if ( !inv && fn(elems[i],i) || inv && !fn(elems[i],i) )
+ result.push( elems[i] );
- return r;
+ return result;
},
/**
* @param Array array The Array to translate.
* @param Function fn The function to process each item against.
*/
- map: function(a,f) {
+ map: function(elems, fn) {
// If a string is passed in for the function, make a function
// for it (a handy shortcut)
- if ( f.constructor == String )
- f = new Function("a","return " + f);
+ if ( fn.constructor == String )
+ fn = new Function("a","return " + fn);
- var r = [];
+ var result = [];
// Go through the array, translating each of the items to their
// new value (or values).
- for ( var i = 0; i < a.length; i++ ) {
- var t = f(a[i],i);
- if ( t !== null && t != undefined ) {
- if ( t.constructor != Array ) t = [t];
- r = jQuery.merge( r, t );
+ for ( var i = 0; i < elems.length; i++ ) {
+ var val = fn(elems[i],i);
+
+ if ( val !== null && val != undefined ) {
+ if ( val.constructor != Array ) val = [val];
+ result = jQuery.merge( result, val );
}
}
- return r;
+
+ return result;
},
/*