diff options
author | Arne de Bree <arne@bukkie.nl> | 2012-02-09 20:48:21 -0500 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2012-02-09 20:48:21 -0500 |
commit | bf7a4df22abcea10cf8f97eb31b5fa989fb4daf5 (patch) | |
tree | 19e51a5073fc4015a717ecd80994d94e60cb65a2 | |
parent | 96bb57d4ef49a0ab8f753108cc016fa215e237f4 (diff) | |
download | jquery-bf7a4df22abcea10cf8f97eb31b5fa989fb4daf5.tar.gz jquery-bf7a4df22abcea10cf8f97eb31b5fa989fb4daf5.zip |
Fix #11291. Always clone XML docs with a genuine .cloneNode().
-rw-r--r-- | src/manipulation.js | 6 | ||||
-rw-r--r-- | test/unit/manipulation.js | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/manipulation.js b/src/manipulation.js index 52a869dae..b295f4b7e 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -24,7 +24,7 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca rhtml = /<|&#?\w+;/, rnoInnerhtml = /<(?:script|style)/i, rnocache = /<(?:script|object|embed|option|style)/i, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"), + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, @@ -461,7 +461,7 @@ function cloneFixAttributes( src, dest ) { // Event data gets referenced instead of copied if the expando // gets copied too dest.removeAttribute( jQuery.expando ); - + // Clear flags for bubbling special change/submit events, they must // be reattached when the newly cloned events are first activated dest.removeAttribute( "_submit_attached" ); @@ -590,7 +590,7 @@ jQuery.extend({ destElements, i, // IE<=8 does not properly clone detached, unknown element nodes - clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ? + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ? elem.cloneNode( true ) : shimCloneNode( elem ); diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 6f7077320..48618258f 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -1218,6 +1218,16 @@ test("clone() on XML nodes", function() { }); } +test("clone() on local XML nodes with html5 nodename", function() { + expect(2); + + var $xmlDoc = jQuery( jQuery.parseXML( "<root><meter /></root>" ) ), + $meter = $xmlDoc.find( "meter" ).clone(); + + equal( $meter[0].nodeName, "meter", "Check if nodeName was not changed due to cloning" ); + equal( $meter[0].nodeType, 1, "Check if nodeType is not changed due to cloning" ); +} ); + test("html(undefined)", function() { expect(1); equal( jQuery("#foo").html("<i>test</i>").html(undefined).html().toLowerCase(), "<i>test</i>", ".html(undefined) is chainable (#5571)" ); |