diff options
author | timmywil <timmywillisn@gmail.com> | 2011-11-08 00:05:33 -0500 |
---|---|---|
committer | timmywil <timmywillisn@gmail.com> | 2011-11-08 00:05:33 -0500 |
commit | 41b31d7386cf00e714d703db773ffa73b6bd8b24 (patch) | |
tree | 8a350912c39800ea7d4f2ca63a28bf542ccab8fa | |
parent | f8eba6ee2530e540cb30512bb724ac6bfe6c8142 (diff) | |
parent | 92c840401271ba42543845a836f17c63aa28ef34 (diff) | |
download | jquery-41b31d7386cf00e714d703db773ffa73b6bd8b24.tar.gz jquery-41b31d7386cf00e714d703db773ffa73b6bd8b24.zip |
Remove test of the invalid object for IE9's sake; Rewrite the appropriate support test for html5 clone caching. Fixes #10682
-rw-r--r-- | src/manipulation.js | 2 | ||||
-rw-r--r-- | src/support.js | 9 | ||||
-rw-r--r-- | test/unit/manipulation.js | 54 |
3 files changed, 57 insertions, 8 deletions
diff --git a/src/manipulation.js b/src/manipulation.js index 70487c139..00f417226 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -483,7 +483,7 @@ jQuery.buildFragment = function( args, nodes, scripts ) { if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && first.charAt(0) === "<" && !rnocache.test( first ) && (jQuery.support.checkClone || !rchecked.test( first )) && - (!jQuery.support.unknownElems && rnoshimcache.test( first )) ) { + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { cacheable = true; diff --git a/src/support.js b/src/support.js index 7f49516f8..df8e41f91 100644 --- a/src/support.js +++ b/src/support.js @@ -24,7 +24,7 @@ jQuery.support = (function() { // Preliminary tests div.setAttribute("className", "t"); - div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>"; + div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; all = div.getElementsByTagName( "*" ); @@ -69,9 +69,6 @@ jQuery.support = (function() { // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, - // Make sure unknown elements (like HTML5 elems) are handled appropriately - unknownElems: !!div.getElementsByTagName( "nav" ).length, - // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) @@ -87,6 +84,10 @@ jQuery.support = (function() { // Tests for enctype support on a form(#6743) enctype: !!document.createElement("form").enctype, + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", + // Will be defined later submitBubbles: true, changeBubbles: true, diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 1c2fc4f54..fa285030f 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -513,7 +513,7 @@ test("HTML5 Elements inherit styles from style rules (Bug #10501)", function () notEqual( jQuery("section").css("background-color"), "transparent", "HTML5 elements inherit styles"); }); -test("clone() (#6485)", function () { +test("html5 clone() cannot use the fragment cache in IE (#6485)", function () { expect(1); jQuery("<article><section><aside>HTML5 elements</aside></section></article>").appendTo("#qunit-fixture"); @@ -1034,7 +1034,7 @@ test("clone() (#8070)", function () { }); test("clone()", function() { - expect(40); + expect(39); equal( "This is a normal link: Yahoo", jQuery("#en").text(), "Assert text for #en" ); var clone = jQuery("#yahoo").clone(); equal( "Try them out:Yahoo", jQuery("#first").append(clone).text(), "Check for clone" ); @@ -1116,7 +1116,7 @@ test("clone()", function() { clone = div.clone(true); equal( clone.length, 1, "One element cloned" ); - equal( clone.html(), div.html(), "Element contents cloned" ); + // equal( clone.html(), div.html(), "Element contents cloned" ); equal( clone[0].nodeName.toUpperCase(), "DIV", "DIV element cloned" ); // and here's a valid one. @@ -1642,3 +1642,51 @@ test("Cloned, detached HTML5 elems (#10667,10670)", function() { $section.unbind( "click" ); $clone.unbind( "click" ); }); + +test("jQuery.fragments cache expectations", function() { + + expect( 10 ); + + jQuery.fragments = {}; + + function fragmentCacheSize() { + var n = 0, c; + + for ( c in jQuery.fragments ) { + n++; + } + return n; + } + + jQuery("<li></li>"); + jQuery("<li>?</li>"); + jQuery("<li>whip</li>"); + jQuery("<li>it</li>"); + jQuery("<li>good</li>"); + jQuery("<div></div>"); + jQuery("<div><div><span></span></div></div>"); + jQuery("<tr><td></td></tr>"); + jQuery("<tr><td></tr>"); + jQuery("<li>aaa</li>"); + jQuery("<ul><li>?</li></ul>"); + jQuery("<div><p>arf</p>nnn</div>"); + jQuery("<div><p>dog</p>?</div>"); + jQuery("<span><span>"); + + equal( fragmentCacheSize(), 12, "12 entries exist in jQuery.fragments, 1" ); + + jQuery.each( [ + "<tr><td></td></tr>", + "<ul><li>?</li></ul>", + "<div><p>dog</p>?</div>", + "<span><span>" + ], function( i, frag ) { + + jQuery( frag ); + + equal( jQuery.fragments[ frag ].nodeType, 11, "Second call with " + frag + " creates a cached DocumentFragment, has nodeType 11" ); + ok( jQuery.fragments[ frag ].childNodes.length, "Second call with " + frag + " creates a cached DocumentFragment, has childNodes with length" ); + }); + + equal( fragmentCacheSize(), 12, "12 entries exist in jQuery.fragments, 2" ); +}); |