jquery core: improves #3248. Functions are supported by isFunction.
[jquery.git] / src / core.js
index fd19d75..3a2548f 100644 (file)
@@ -90,9 +90,6 @@ jQuery.fn = jQuery.prototype = {
                return this.length;
        },
 
-       // The number of elements contained in the matched element set
-       length: 0,
-
        // Get the Nth element in the matched element set OR
        // Get the whole matched element set as a clean array
        get: function( num ) {
@@ -357,11 +354,13 @@ jQuery.fn = jQuery.prototype = {
        },
 
        val: function( value ) {
-               if ( value == undefined ) {
-
-                       if ( this.length ) {
-                               var elem = this[0];
+               if ( value == undefined ) {                     
+                       var elem = this[0];
 
+                       if ( elem ) {
+                               if( jQuery.nodeName( elem, 'option' ) )
+                                       return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+                               
                                // We need to handle select boxes special
                                if ( jQuery.nodeName( elem, "select" ) ) {
                                        var index = elem.selectedIndex,
@@ -379,7 +378,7 @@ jQuery.fn = jQuery.prototype = {
 
                                                if ( option.selected ) {
                                                        // Get the specifc value for the option
-                                                       value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
+                                                       value = jQuery(option).val();
 
                                                        // We don't need an array for one selects
                                                        if ( one )
@@ -390,11 +389,11 @@ jQuery.fn = jQuery.prototype = {
                                                }
                                        }
 
-                                       return values;
+                                       return values;                          
+                               }
 
                                // Everything else, we just grab the value
-                               } else
-                                       return (this[0].value || "").replace(/\r/g, "");
+                               return (elem.value || "").replace(/\r/g, "");
 
                        }
 
@@ -613,9 +612,14 @@ jQuery.extend({
        },
 
        // See test/unit/core.js for details concerning this function.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       
+       // Memory leaks appear in IE6 when applying instanceof 
+       // to the window, document or any other COM object (#3485)
+       // http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
        isFunction: function( fn ) {
-               return !!fn && typeof fn != "string" && !fn.nodeName &&
-                       fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
+               return !!fn && !!fn.hasOwnProperty && fn instanceof Function;
        },
 
        // check if an element is in a (or is an) XML document
@@ -1125,13 +1129,15 @@ jQuery.extend({
                return (text || "").replace( /^\s+|\s+$/g, "" );
        },
 
+       // NOTE: Due to the conflict with Scriptaculous (http://dev.jquery.com/ticket/3248)
+       // We remove support for functions since jQuery 1.3
        makeArray: function( array ) {
                var ret = [];
 
                if( array != null ){
                        var i = array.length;
-                       //the window, strings and functions also have 'length'
-                       if( i == null || array.split || array.setInterval || array.call )
+                       // The window, strings (and functions) also have 'length'
+                       if( i == null || typeof array == 'string' || jQuery.isFunction(array) || array.setInterval )
                                ret[0] = array;
                        else
                                while( i )
@@ -1221,7 +1227,7 @@ var userAgent = navigator.userAgent.toLowerCase();
 
 // Figure out what browser is being used
 jQuery.browser = {
-       version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
+       version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
        safari: /webkit/.test( userAgent ),
        opera: /opera/.test( userAgent ),
        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),