X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=f6e2adec48a593f38caabd46bd077e810f1427ac;hb=789f0e1093beb559bb2acef708cc4b27c00f557d;hp=e38044147702736a15d83d7edbfc674b6fa56d0a;hpb=e50014d47e3f3799031119595a43082ea94afd89;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index e380441..f6e2ade 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -23,39 +23,41 @@ window.undefined = window.undefined; * @cat Core */ var jQuery = function(a,c) { + // If the context is global, return a new object + if ( window == this ) + return new jQuery(a,c); + // Make sure that a selection was provided a = a || document; + // HANDLE: $(function) // Shortcut for document ready // Safari reports typeof on DOM NodeLists as a function if ( typeof a == "function" && !a.nodeType && a[0] == undefined ) - return jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a ); - - // Watch for when a jQuery object is passed as the selector - if ( a.jquery ) - return jQuery( jQuery.makeArray( a ) ); - - // Watch for when a jQuery object is passed at the context - if ( c && c.jquery ) - return jQuery( c ).find(a); - - // If the context is global, return a new object - if ( window == this ) - return new jQuery(a,c); - + return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a ); + // Handle HTML strings if ( typeof a == "string" ) { + // HANDLE: $(html) -> $(array) var m = /^[^<]*(<.+>)[^>]*$/.exec(a); - if ( m ) a = jQuery.clean( [ m[1] ] ); + if ( m ) + a = jQuery.clean( [ m[1] ] ); + + // HANDLE: $(expr) + else + return new jQuery( c ).find( a ); } + + return this.setArray( + // HANDLE: $(array) + a.constructor == Array && a || - // Watch for when an array is passed in - return this.setArray( a.constructor == Array || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType ? - // Assume that it is an array of DOM Elements - jQuery.makeArray( a ) : + // HANDLE: $(arraylike) + // Watch for when an array-like object is passed as the selector + (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) || - // Find the matching elements and save them for later - jQuery.find( a, c ) ); + // HANDLE: $(*) + [ a ] ); }; // Map over the $ in case of overwrite @@ -437,17 +439,15 @@ jQuery.fn = jQuery.prototype = { for ( var prop in key ) jQuery.attr( type ? this.style : this, - prop, jQuery.parseSetter(key[prop]) + prop, jQuery.prop(this, prop, key[prop], type) ); // See if we're setting a single key/value style - else { - // convert ${this.property} to function returnung that property + else jQuery.attr( type ? this.style : this, - key, jQuery.parseSetter(value) + key, jQuery.prop(this, key, value, type) ); - } }) : // Look for the case where we're accessing a style value @@ -526,10 +526,17 @@ jQuery.fn = jQuery.prototype = { */ /** - * Set the text contents of all matched elements. This has the same - * effect as html(). + * Set the text contents of all matched elements. + * + * Similar to html(), but escapes HTML (replace "<" and ">" with their + * HTML entities). + * + * @example $("p").text("Some new text."); + * @before

Test Paragraph.

+ * @result

<b>Some</b> new text.

+ * @desc Sets the text of all paragraphs. * - * @example $("p").text("Some new text."); + * @example $("p").text("Some new text.", true); * @before

Test Paragraph.

* @result

Some new text.

* @desc Sets the text of all paragraphs. @@ -540,21 +547,12 @@ jQuery.fn = jQuery.prototype = { * @cat DOM/Attributes */ text: function(e) { - // A surprisingly high number of people expect the - // .text() method to do this, so lets do it! - if ( typeof e == "string" ) - return this.html( e ); - - e = e || this; - var t = ""; - for ( var j = 0, el = e.length; j < el; j++ ) { - var r = e[j].childNodes; - for ( var i = 0, rl = r.length; i < rl; i++ ) - if ( r[i].nodeType != 8 ) - t += r[i].nodeType != 1 ? - r[i].nodeValue : jQuery.fn.text([ r[i] ]); - } - return t; + var type = this.length && this[0].innerText == undefined ? + "textContent" : "innerText"; + + return e == undefined ? + this.length && this[0][ type ] : + this.each(function(){ this[ type ] = e; }); }, /** @@ -1223,6 +1221,12 @@ jQuery.extend({ if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break; return obj; }, + + prop: function(elem, key, value){ + // Handle executable functions + return value.constructor == Function && + value.call( elem ) || value; + }, className: { add: function( elem, c ){ @@ -1389,16 +1393,6 @@ jQuery.extend({ return r; }, - parseSetter: function(value) { - if( typeof value == "string" && value.charAt(0) == "$" ) { - var m = value.match(/{(.*)}$/); - if ( m && m[1] ) { - value = new Function( "return " + m[1] ); - } - } - return value; - }, - attr: function(elem, name, value){ var fix = { "for": "htmlFor", @@ -1414,11 +1408,6 @@ jQuery.extend({ selected: "selected" }; - // get value if a function is provided - if ( value && typeof value == "function" ) { - value = value.apply( elem ); - } - // 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