X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=5e2864b3159d0110c99fbd8515bc5d42a12b1ab0;hb=54035207fe91cb57f49bb8c0c9f7b4ada8d05346;hp=5c9dcf3bd68599a168a1b398338cc10167608fe6;hpb=fd4905b4d9183fe80fa0171c2f8ce47f0361df3b;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 5c9dcf3..5e2864b 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -24,7 +24,7 @@ window.undefined = window.undefined; */ 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); @@ -176,7 +176,7 @@ jQuery.fn = jQuery.prototype = { // 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 ] ); @@ -811,7 +811,7 @@ jQuery.fn = jQuery.prototype = { /** * Searches for all elements that match the specified expression. - + * * This method is a good way to find additional descendant * elements with which to process. * @@ -830,9 +830,9 @@ jQuery.fn = jQuery.prototype = { * @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 ); }, /** @@ -1443,7 +1443,7 @@ jQuery.extend({ } if (prop.match(/float/i)) - prop = jQuery.browser.msie ? "styleFloat" : "cssFloat"; + prop = jQuery.styleFloat; if (!force && elem.style[prop]) ret = elem.style[prop]; @@ -1539,7 +1539,7 @@ jQuery.extend({ 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 ) @@ -1553,37 +1553,7 @@ jQuery.extend({ }, 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] ) { @@ -1595,6 +1565,8 @@ jQuery.extend({ // 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 ); @@ -1602,6 +1574,21 @@ jQuery.extend({ // 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]; @@ -1770,7 +1757,7 @@ jQuery.extend({ 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). @@ -1824,7 +1811,7 @@ new function() { // 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), @@ -1833,6 +1820,24 @@ new function() { // 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" + }; }; /**