X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=d5a32e24da2431e0cf7d8a8efc3c8830562e25b2;hb=f96bf1041553775a94c1034c97e253e350217173;hp=09e714cc59e72f216848e6244a534e38c525208f;hpb=7d02f06e036f6a42ccd2c276e9f00a7cd35dc74a;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 09e714c..d5a32e2 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -306,9 +306,32 @@ jQuery.fn = jQuery.prototype = { }, val: function( val ) { - return val == undefined ? - ( this.length ? this[0].value : null ) : - this.attr( "value", val ); + if ( val == undefined ) { + if ( this.length ) { + var elem = this[0]; + + // We need to handle select boxes special if ( jQuery.nodeName(elem, "select") ) { var index = elem.selectedIndex, + a = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected if ( index < 0 ) + return null; + + // Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[i]; if ( option.selected ) { // Get the specifc value for the option var val = jQuery.browser.msie && !option.attributes["value"].specified ? option.text : option.value; + + // We don't need an array for one selects if ( one ) + return val; + + // Multi-Selects return an array a.push(val); } } + return a; + + // Everything else, we just grab the value } else + return this[0].value.replace(/\r/g, ""); + } + } else + return this.attr( "value", val ); }, html: function( val ) { @@ -325,13 +348,17 @@ jQuery.fn = jQuery.prototype = { return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); }, - map: function(fn){ + map: function(fn) { return this.pushStack(jQuery.map( this, function(elem,i){ return fn.call( elem, i, elem ); })); }, + + andSelf: function() { + return this.add( this.prevObject ); + }, - domManip: function(args, table, dir, fn){ + domManip: function(args, table, dir, fn) { var clone = this.length > 1, a; return this.each(function(){ @@ -633,6 +660,11 @@ jQuery.extend({ // Convert html string into DOM nodes if ( typeof arg == "string" ) { + // Fix "XHTML"-style tags in all browsers + arg = arg.replace(/(<(\w+)[^>]*?)\/>/g, function(m, all, tag){ + return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area)$/i)? m : all+">"; + }); + // Trim whitespace, otherwise indexOf won't work as expected var s = jQuery.trim(arg).toLowerCase(), div = doc.createElement("div"), tb = [];