X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=50549bb147746532cec8db3ed1f7fa028949121e;hb=b603ca03c460bad9d8cf367ddc0f18ef46a2ef2d;hp=e566cb671b5f2c676cf6be70362f28c3a5feb404;hpb=0798c6e64e4e0c984d5ece50ade61827c2105c39;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index e566cb6..50549bb 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 @@ -388,6 +390,8 @@ jQuery.fn = jQuery.prototype = { /** * Set a single property to a value, on all matched elements. * + * Can compute values provided as ${formula}, see second example. + * * Note that you can't set the name property of input elements in IE. * Use $(html) or .append(html) or .html(html) to create elements * on the fly including the name property. @@ -397,12 +401,34 @@ jQuery.fn = jQuery.prototype = { * @result * @desc Sets src attribute to all images. * + * @example $("img").attr("title", "${this.src}"); + * @before + * @result + * @desc Sets title attribute from src attribute, a shortcut for attr(String,Function) + * * @name attr * @type jQuery * @param String key The name of the property to set. * @param Object value The value to set the property to. * @cat DOM/Attributes */ + + /** + * Set a single property to a computed value, on all matched elements. + * + * Instead of a value, a function is provided, that computes the value. + * + * @example $("img").attr("title", function() { return this.src }); + * @before + * @result + * @desc Sets title attribute from src attribute. + * + * @name attr + * @type jQuery + * @param String key The name of the property to set. + * @param Function value A function returning the value to set. + * @cat DOM/Attributes + */ attr: function( key, value, type ) { // Check to see if we're setting style values return typeof key != "string" || value != undefined ? @@ -413,14 +439,14 @@ jQuery.fn = jQuery.prototype = { for ( var prop in key ) jQuery.attr( type ? this.style : this, - prop, key[prop] + prop, jQuery.prop(this, prop, key[prop], type) ); // See if we're setting a single key/value style else jQuery.attr( type ? this.style : this, - key, value + key, jQuery.prop(this, key, value, type) ); }) : @@ -500,10 +526,19 @@ 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. + * + * If stripTags argument is set to true, HTML is stripped. + * + * @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. @@ -511,13 +546,12 @@ jQuery.fn = jQuery.prototype = { * @name text * @type String * @param String val The text value to set the contents of the element to. + * @param Boolean stripTags (optional) Wheather to strip or only escape tags * @cat DOM/Attributes */ - text: function(e) { - // A surprisingly high number of people expect the - // .text() method to do this, so lets do it! + text: function(e, stripTags) { if ( typeof e == "string" ) - return this.html( e ); + return this.html( stripTags ? e.replace(/<\/?[^>]+>/gi, '') : e.replace(//g, ">") ); e = e || this; var t = ""; @@ -1197,6 +1231,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, val ) || value; + }, className: { add: function( elem, c ){ @@ -1579,7 +1619,7 @@ jQuery.extend({ } } - var r = [ result[0] ]; + var r = result.length ? [ result[0] ] : []; check: for ( var i = 1, rl = result.length; i < rl; i++ ) { for ( var j = 0; j < i; j++ )