X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=jquery%2Fjquery.js;h=a06e81c29f169fe6c010575dcff70a28787fe829;hb=44590a5d848011d4be05fcf1d098d09c01bb7caf;hp=b7a2799a5ecd4f69b60596eb54e0d33a8f444389;hpb=a70ab6564bb469af0a64d43bb0b5c20bc27d83fb;p=jquery.git diff --git a/jquery/jquery.js b/jquery/jquery.js index b7a2799..a06e81c 100644 --- a/jquery/jquery.js +++ b/jquery/jquery.js @@ -162,7 +162,7 @@ function $(a,c) { append: function() { var clone = this.size() > 1; var a = $.clean(arguments); - return this.each(function(){ + return this.domManip(function(){ for ( var i = 0; i < a.length; i++ ) { this.appendChild( clone ? a[i].cloneNode(true) : a[i] ); } @@ -181,7 +181,7 @@ function $(a,c) { prepend: function() { var clone = this.size() > 1; var a = $.clean(arguments); - return this.each(function(){ + return this.domManip(function(){ for ( var i = a.length - 1; i >= 0; i-- ) { this.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.firstChild ); } @@ -353,10 +353,15 @@ $.apply = function(o,f,a) { $.getCSS = function(e,p) { // Adapted from Prototype 1.4.0 if ( p == 'height' || p == 'width' ) { - var ph = $.browser == "msie" ? 0 : - parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom")); - var pw = $.browser == "msie" ? 0 : - parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")); + + // Handle extra width/height provided by the W3C box model + var ph = !$.boxModel ? 0 : + parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom")) + + parseInt($.css(e,"borderTop")) + parseInt($.css(e,"borderBottom")); + + var pw = !$.boxModel ? 0 : + parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight")) + + parseInt($.css(e,"borderLeft")) + parseInt($.css(e,"borderRight")); var oHeight, oWidth; @@ -403,15 +408,25 @@ $.clean = function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { - if ( a[i].indexOf(""; + } else if ( !a[i].indexOf(""; } + var div = document.createElement("div"); div.innerHTML = a[i]; - if ( tr ) { + + if ( tr || td ) { div = div.firstChild.firstChild; + if ( td ) { + div = div.firstChild; + } } + for ( var j = 0; j < div.childNodes.length; j++ ) { r[r.length] = div.childNodes[j]; } @@ -427,6 +442,28 @@ $.clean = function(a) { return r; }; +$.fn = {}; + +/** + * A wrapper function for each() to be used by append and prepend. + * Handles cases where you're trying to modify the inner contents of + * a table, when you actually need to work with the tbody. + */ +$.fn.domManip = function(fn){ + return this.each(function(){ + var obj = this; + + if ( this.nodeName == 'TABLE' ) { + if ( !this.firstChild ) { + this.appendChild( document.createElement("tbody") ); + } + obj = this.firstChild; + } + + $.apply( obj, fn ); + }); +}; + $.g = { '': "m[2] == '*' || a.nodeName.toUpperCase() == m[2].toUpperCase()", '#': "a.getAttribute('id') && a.getAttribute('id').nodeValue == m[2]", @@ -474,8 +511,6 @@ $.g = { "[": "$.Select(m[2],a).length > 0" }; -$.fn = {}; - $.Select = function( t, context ) { context = context || $.context || document; if ( t.constructor != String ) { @@ -602,8 +637,7 @@ $.attr = function(o,a,v){ 'for': 'htmlFor', 'text': 'cssText', 'class': 'className', - 'float': 'cssFloat', - 'style': 'cssText' + 'float': 'cssFloat' }; a = (fix[a] && fix[a].replace && fix[a]) || a; var r = new RegExp("-([a-z])","ig"); @@ -773,7 +807,12 @@ $.event = {}; // Bind an event to an element // Original by Dean Edwards $.event.add = function(element, type, handler) { - if ( element.location ) { element = window; } // Ughhhhh.... + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( $.browser == "msie" && typeof element.setInterval != "undefined" ) { + element = window; + } + if (!handler.$$guid) { handler.$$guid = $.event.add.guid++; } if (!element.events) { element.events = {}; } var handlers = element.events[type];