X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=965c2798abd538cea0d493bceb2fbc1c4d94dc85;hb=2e544e9eb89c87b9eac6df445474d21e9be604eb;hp=70c3c605c41f3c47e4b7eda44ce53f9c74208dfb;hpb=401b58c17e5b1e666ea30c262399254ae0a60a0e;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 70c3c60..965c279 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -1,5 +1,5 @@ /* - * jQuery - New Wave Javascript + * jQuery @VERSION - New Wave Javascript * * Copyright (c) 2006 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) @@ -50,8 +50,10 @@ jQuery = function(a,c) { return new jQuery(a,c); // Handle HTML strings - var m = /^[^<]*(<.+>)[^>]*$/.exec(a); - if ( m ) a = jQuery.clean( [ m[1] ] ); + if (typeof a == "string") { + var m = /^[^<]*(<.+>)[^>]*$/.exec(a); + if ( m ) a = jQuery.clean( [ m[1] ] ); + } // Watch for when an array is passed in this.get( a.constructor == Array || a.length && !a.nodeType && a[0] != undefined && a[0].nodeType ? @@ -95,7 +97,10 @@ if ( typeof $ != "undefined" ) * @result [
two
] * * @example $("Hello
Hello
] * * @test isSet( $("input").filter(":checked").get(), q("radio2", "check1"), "Filter elements" ); + * @test $("input").filter(":checked",function(i){ + * ok( this == q("radio2", "check1")[i], "Filter elements, context" ); + * }); + * @test $("#main > p#ap > a").filter("#foobar",function(){},function(i){ + * ok( this == q("google","groups", "mark")[i], "Filter elements, else context" ); + * }); * * @name filter * @type jQuery @@ -1047,6 +1064,7 @@ jQuery.fn = jQuery.prototype = { * @example $("p").not("#selected") * @beforeHello
Hello Again
* @result [Hello
] + * * @test ok($("#main > p#ap > a").not("#google").length == 2, ".not") * * @name not @@ -1157,7 +1175,7 @@ jQuery.fn = jQuery.prototype = { is: function(expr) { return expr ? jQuery.filter(expr,this).r.length > 0 : false; }, - + /** * * @@ -1206,17 +1224,23 @@ jQuery.fn = jQuery.prototype = { */ pushStack: function(a,args) { var fn = args && args[args.length-1]; + var fn2 = args && args[args.length-2]; + + if ( fn && fn.constructor != Function ) fn = null; + if ( fn2 && fn2.constructor != Function ) fn2 = null; - if ( !fn || fn.constructor != Function ) { + if ( !fn ) { if ( !this.stack ) this.stack = []; this.stack.push( this.get() ); this.get( a ); } else { var old = this.get(); this.get( a ); - if ( typeof fn == "function" ) - this.each( fn ); - this.get( old ); + + if ( fn2 && a.length || !fn2 ) + this.each( fn2 || fn ).get( old ); + else + this.get( old ).each( fn ); } return this; @@ -1373,10 +1397,6 @@ jQuery.extend({ o.className += ( o.className ? " " : "" ) + c; }, remove: function(o,c){ - /* - o.className = !c ? "" : - o.className.replace( - new RegExp("(^|\\s*\\b[^-])"+c+"($|\\b(?=[^-]))", "g"), "");*/ if( !c ) { o.className = ""; } else { @@ -1444,14 +1464,19 @@ jQuery.extend({ }); return p == "height" ? oHeight : oWidth; - } else if ( p == "opacity" && jQuery.browser.msie ) - return parseFloat( jQuery.curCSS(e,"filter").replace(/[^0-9.]/,"") ) || 1; + } return jQuery.curCSS( e, p ); }, curCSS: function(elem, prop, force) { var ret; + + if (prop == 'opacity' && jQuery.browser.msie) + return jQuery.attr(elem.style, 'opacity'); + + if (prop == "float" || prop == "cssFloat") + prop = jQuery.browser.msie ? "styleFloat" : "cssFloat"; if (!force && elem.style[prop]) { @@ -1485,7 +1510,9 @@ jQuery.extend({ var r = []; for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { - + // trim whitespace, otherwise indexOf won't work as expected + a[i] = jQuery.trim(a[i]); + var table = ""; if ( !a[i].indexOf("=0", + contains: "((a.firstChild && a.firstChild.nodeValue)||a.innerText||a.innerHTML).indexOf(m[3])>=0", // Visibility visible: "a.type!='hidden'&&jQuery.css(a,'display')!='none'&&jQuery.css(a,'visibility')!='hidden'", @@ -1554,7 +1581,7 @@ jQuery.extend({ enabled: "!a.disabled", disabled: "a.disabled", checked: "a.checked", - selected: "a.selected", + selected: "a.selected || jQuery.attr(a, 'selected')", // Form elements text: "a.type=='text'", @@ -1813,18 +1840,37 @@ jQuery.extend({ var fix = { "for": "htmlFor", "class": "className", - "float": "cssFloat", + "float": jQuery.browser.msie ? "styleFloat" : "cssFloat", + cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat", innerHTML: "innerHTML", className: "className", value: "value", disabled: "disabled", checked: "checked" }; + + // IE actually uses filters for opacity ... elem is actually elem.style + if (name == "opacity" && jQuery.browser.msie && value != undefined) { + // IE has trouble with opacity if it does not have layout + // Would prefer to check element.hasLayout first but don't have access to the element here + elem['zoom'] = 1; + if (value == 1) // Remove filter to avoid more IE weirdness + return elem["filter"] = elem["filter"].replace(/alpha\([^\)]*\)/gi,""); + else + return elem["filter"] = elem["filter"].replace(/alpha\([^\)]*\)/gi,"") + "alpha(opacity=" + value * 100 + ")"; + } else if (name == "opacity" && jQuery.browser.msie) { + return elem["filter"] ? parseFloat( elem["filter"].match(/alpha\(opacity=(.*)\)/)[1] )/100 : 1; + } + + // Mozilla doesn't play well with opacity 1 + if (name == "opacity" && jQuery.browser.mozilla && value == 1) value = 0.9999; if ( fix[name] ) { if ( value != undefined ) elem[fix[name]] = value; return elem[fix[name]]; - } else if ( elem.getAttribute != undefined ) { + } else if( value == undefined && jQuery.browser.msie && elem.nodeName && elem.nodeName.toUpperCase() == 'FORM' && (name == 'action' || name == 'method') ) { + return elem.getAttributeNode(name).nodeValue; + } else if ( elem.getAttribute != undefined && elem.tagName ) { // IE elem.getAttribute passes even for style if ( value != undefined ) elem.setAttribute( name, value ); return elem.getAttribute( name, 2 ); } else { @@ -1837,13 +1883,13 @@ jQuery.extend({ // The regular expressions that power the parsing engine parse: [ // Match: [@value='test'], [@foo] - "\\[ *(@)S *([!*$^=]*)Q\\]", + "\\[ *(@)S *([!*$^=]*) *('?\"?)(.*?)\\4 *\\]", // Match: [div], [div p] - "(\\[)Q\\]", + "(\\[)\s*(.*?)\s*\\]", // Match: :contains('foo') - "(:)S\\(Q\\)", + "(:)S\\(\"?'?([^\\)]*?)\"?'?\\)", // Match: :even, :last-chlid "([:.#]*)S" @@ -1859,28 +1905,19 @@ jQuery.extend({ var p = jQuery.parse; for ( var i = 0; i < p.length; i++ ) { - // get number for backreference - var br = 0; - if(p[i].indexOf('Q') != -1){ - br = p[i].replace(/\\\(/g,'').match(/\(|S/g).length+1; - } - var re = new RegExp( "^" + p[i] - - // Look for a string-like sequence - .replace( 'S', "([a-z*_-][a-z0-9_-]*)" ) - - // Look for something (optionally) enclosed with quotes - .replace( 'Q', " *('|\"|)([^'\"]*?)\\"+br+" *" ), "i" ); + + // Look for, and replace, string-like sequences + // and finally build a regexp out of it + var re = new RegExp( + "^" + p[i].replace("S", "([a-z*_-][a-z0-9_-]*)"), "i" ); var m = re.exec( t ); if ( m ) { - // Re-organize the match - if(br == 4){ + // Re-organize the first match + if ( !i ) m = ["",m[1], m[3], m[2], m[5]]; - } else if(br != 0) { - m.splice(br,1); - } + // Remove what we just matched t = t.replace( re, "" );