*/
var jQuery = function(a,c) {
// If the context is global, return a new object
- if ( window == this )
+ if ( window == this || !this.init )
return new jQuery(a,c);
return this.init(a,c);
// HANDLE: $(arraylike)
// Watch for when an array-like object is passed as the selector
- (a.jquery || a.length && a != window && (!a.nodeType || (jQuery.browser.msie && a.elements)) && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
+ (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
// HANDLE: $(*)
[ a ] );
* @cat DOM/Traversing
*/
find: function(t) {
- return this.pushStack( jQuery.unique( jQuery.map( this, function(a){
- return jQuery.find(t,a);
- }) ), t );
+ var data = jQuery.map(this, function(a){ return jQuery.find(t,a); });
+ return this.pushStack( /[^+>] [^+>]/.test( t ) || t.indexOf("..") > -1 ?
+ jQuery.unique( data ) : data );
},
/**
}
if (prop.match(/float/i))
- prop = jQuery.browser.msie ? "styleFloat" : "cssFloat";
+ prop = jQuery.styleFloat;
if (!force && elem.style[prop])
ret = elem.style[prop];
arg = jQuery.makeArray( div.childNodes );
}
- if ( 0 === arg.length && !jQuery(arg).is("form, select") )
+ if ( 0 === arg.length && (!jQuery.nodeName(arg, "form") && !jQuery.nodeName(arg, "select")) )
return;
if ( arg[0] == undefined || jQuery.nodeName(arg, "form") || arg.options )
},
attr: function(elem, name, value){
- var fix = jQuery.isXMLDoc(elem) ? {} : {
- "for": "htmlFor",
- "class": "className",
- "float": jQuery.browser.msie ? "styleFloat" : "cssFloat",
- cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
- styleFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
- innerHTML: "innerHTML",
- className: "className",
- value: "value",
- disabled: "disabled",
- checked: "checked",
- readonly: "readOnly",
- selected: "selected",
- maxlength: "maxLength"
- };
-
- // IE actually uses filters for opacity ... elem is actually elem.style
- if ( name == "opacity" && jQuery.browser.msie ) {
- if ( value != undefined ) {
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- elem.zoom = 1;
-
- // Set the alpha filter to set the opacity
- elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/,"") +
- (parseFloat(value).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
- }
-
- return elem.filter ?
- (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "";
- }
+ var fix = jQuery.isXMLDoc(elem) ? {} : jQuery.props;
// Certain attributes only work when accessed via the old DOM 0 way
if ( fix[name] ) {
// IE elem.getAttribute passes even for style
else if ( elem.tagName ) {
+
+
if ( value != undefined ) elem.setAttribute( name, value );
if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) )
return elem.getAttribute( name, 2 );
// 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
+ // Force it by setting the zoom level
+ elem.zoom = 1;
+
+ // Set the alpha filter to set the opacity
+ elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/,"") +
+ (parseFloat(value).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
+ }
+
+ return elem.filter ?
+ (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "";
+ }
name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
if ( value != undefined ) elem[name] = value;
return elem[name];
},
/**
- * Merge two arrays together, removing all duplicates.
- *
- * The result is the altered first argument with
- * the unique elements from the second array added.
+ * Merge two arrays together by concatenating them.
*
* @example $.merge( [0,1,2], [2,3,4] )
- * @result [0,1,2,3,4]
- * @desc Merges two arrays, removing the duplicate 2
- *
- * @example var array = [3,2,1];
- * $.merge( array, [4,3,2] )
- * @result array == [3,2,1,4]
- * @desc Merges two arrays, removing the duplicates 3 and 2
+ * @result [0,1,2,2,3,4]
+ * @desc Merges two arrays.
*
* @name $.merge
* @type Array
- * @param Array first The first array to merge, the unique elements of second added.
- * @param Array second The second array to merge into the first, unaltered.
+ * @param Array first The first array to merge, the elements of second are added.
+ * @param Array second The second array to append to the first, unaltered.
* @cat JavaScript
*/
merge: function(first, second) {
return first;
},
+ /**
+ * Reduce an array (of jQuery objects only) to its unique elements.
+ *
+ * @example $.unique( [x1, x2, x3, x2, x3] )
+ * @result [x1, x2, x3]
+ * @desc Reduces the arrays of jQuery objects to unique elements by removing the duplicates of x2 and x3
+ *
+ * @name $.unique
+ * @type Array
+ * @param Array array The array to reduce to its unique jQuery objects.
+ * @cat JavaScript
+ */
unique: function(first) {
var r = [], num = jQuery.mergeNum++;
if ( typeof fn == "string" )
fn = new Function("a","return " + fn);
- var result = [], r = [];
+ var result = [];
// Go through the array, translating each of the items to their
// new value (or values).
// 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),
// Check to see if the W3C box model is being used
jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
+
+ jQuery.styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat",
+
+ jQuery.props = {
+ "for": "htmlFor",
+ "class": "className",
+ "float": jQuery.styleFloat,
+ cssFloat: jQuery.styleFloat,
+ styleFloat: jQuery.styleFloat,
+ innerHTML: "innerHTML",
+ className: "className",
+ value: "value",
+ disabled: "disabled",
+ checked: "checked",
+ readonly: "readOnly",
+ selected: "selected",
+ maxlength: "maxLength"
+ };
};
/**