core: revertd last change, breaks width/height logic in css()
[jquery.git] / src / core.js
index 56a2b1f..924bf96 100644 (file)
@@ -21,7 +21,7 @@ var jQuery = window.jQuery = window.$ = function( selector, context ) {
 
 // A simple way to check for HTML strings or ID strings
 // (both of which we optimize for)
-var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
+var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
 
 // Is it a simple selector
        isSimple = /^.[^:#\[\.]*$/,
@@ -401,6 +401,9 @@ jQuery.fn = jQuery.prototype = {
                        return undefined;
                }
 
+               if( value.constructor == Number )
+                       value += '';
+
                return this.each(function(){
                        if ( this.nodeType != 1 )
                                return;
@@ -427,7 +430,7 @@ jQuery.fn = jQuery.prototype = {
 
        html: function( value ) {
                return value == undefined ?
-                       (this.length ?
+                       (this[0] ?
                                this[0].innerHTML :
                                null) :
                        this.empty().append( value );
@@ -504,9 +507,9 @@ jQuery.fn = jQuery.prototype = {
                                        this;
 
                                // execute all scripts after the elements have been injected
-                               if ( jQuery.nodeName( elem, "script" ) ) {
+                               if ( jQuery.nodeName( elem, "script" ) )
                                        scripts = scripts.add( elem );
-                               } else {
+                               else {
                                        // Remove any inner scripts for later evaluation
                                        if ( elem.nodeType == 1 )
                                                scripts = scripts.add( jQuery( "script", elem ).remove() );
@@ -637,7 +640,9 @@ jQuery.extend({
                        else
                                script.appendChild( document.createTextNode( data ) );
 
-                       head.appendChild( script );
+                       // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                       // This arises when a base node is used (#2709).
+                       head.insertBefore( script, head.firstChild );
                        head.removeChild( script );
                }
        },
@@ -743,14 +748,14 @@ jQuery.extend({
        },
 
        prop: function( elem, value, type, i, name ) {
-                       // Handle executable functions
-                       if ( jQuery.isFunction( value ) )
-                               value = value.call( elem, i );
-
-                       // Handle passing in a number to a CSS property
-                       return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
-                               value + "px" :
-                               value;
+               // Handle executable functions
+               if ( jQuery.isFunction( value ) )
+                       value = value.call( elem, i );
+
+               // Handle passing in a number to a CSS property
+               return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
+                       value + "px" :
+                       value;
        },
 
        className: {
@@ -938,12 +943,12 @@ jQuery.extend({
                        context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
 
                jQuery.each(elems, function(i, elem){
+                       if ( typeof elem == 'number' )
+                               elem += '';
+
                        if ( !elem )
                                return;
 
-                       if ( elem.constructor == Number )
-                               elem += '';
-
                        // Convert html string into DOM nodes
                        if ( typeof elem == "string" ) {
                                // Fix "XHTML"-style tags in all browsers
@@ -1055,7 +1060,7 @@ jQuery.extend({
                                elem.parentNode.selectedIndex;
 
                        // If applicable, access the attribute via the DOM 0 way
-                       if ( notxml && !special && name in elem ) {
+                       if ( name in elem && notxml && !special ) {
                                if ( set ){
                                        // We can't allow the type property to be changed (since it causes problems in IE)
                                        if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
@@ -1078,11 +1083,13 @@ jQuery.extend({
                                // convert the value to a string (all browsers do this but IE) see #1070
                                elem.setAttribute( name, "" + value );
 
-                       if ( msie && special && notxml )
-                               return elem.getAttribute( name, 2 );
-
-                       return elem.getAttribute( name );
+                       var attr = msie && notxml && special
+                                       // Some attributes require a special call on IE
+                                       ? elem.getAttribute( name, 2 )
+                                       : elem.getAttribute( name );
 
+                       // Non-existent attributes return null, we normalize to undefined
+                       return attr === null ? undefined : attr;
                }
 
                // elem is actually elem.style ... set the style
@@ -1237,7 +1244,8 @@ jQuery.extend({
                styleFloat: styleFloat,
                readonly: "readOnly",
                maxlength: "maxLength",
-               cellspacing: "cellSpacing"
+               cellspacing: "cellSpacing",
+               rowspan: "rowSpan"
        }
 });
 
@@ -1360,4 +1368,4 @@ jQuery.each([ "Height", "Width" ], function(i, name){
 // Helper function used by the dimensions and offset modules
 function num(elem, prop) {
        return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
-}
\ No newline at end of file
+}