X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fsupport.js;h=5821301a9c41dfce77c21d7cd5edf3f6f5ab75b3;hb=a6f3757d50f8be021505f4f7fa7201199e8b7f2d;hp=249fb150970523d71c1b51930f6a480fdfb60805;hpb=03481a52c72e417b01cfeb499f26738cf5ed5839;p=jquery.git diff --git a/src/support.js b/src/support.js index 249fb15..5821301 100644 --- a/src/support.js +++ b/src/support.js @@ -1,4 +1,4 @@ -(function(){ +(function() { jQuery.support = {}; @@ -8,7 +8,7 @@ id = "script" + now(); div.style.display = "none"; - div.innerHTML = '
a'; + div.innerHTML = "
a"; var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0]; @@ -20,7 +20,7 @@ jQuery.support = { // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType == 3, + leadingWhitespace: div.firstChild.nodeType === 3, // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables @@ -47,7 +47,20 @@ // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, + + parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + // Will be defined later + deleteExpando: true, + checkClone: false, scriptEval: false, noCloneEvent: true, boxModel: null @@ -56,7 +69,7 @@ script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e){} + } catch(e) {} root.insertBefore( script, root.firstChild ); @@ -68,10 +81,19 @@ delete window[ id ]; } + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete script.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + root.removeChild( script ); if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click(){ + div.attachEvent("onclick", function click() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; @@ -80,16 +102,25 @@ div.cloneNode(true).fireEvent("onclick"); } + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + // Figure out if the W3C box model works as expected // document.body must exist before we can do this - // TODO: This timeout is temporary until I move ready into core.js. - jQuery(function(){ + jQuery(function() { var div = document.createElement("div"); div.style.width = div.style.paddingLeft = "1px"; document.body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; document.body.removeChild( div ).style.display = 'none'; + div = null; });