From f95147f465932cb91e1a6aace50c556820ca4074 Mon Sep 17 00:00:00 2001 From: jeresig Date: Mon, 1 Feb 2010 21:26:47 -0500 Subject: [PATCH] Fix for problem in IE 8 where deserialized (then reserialized) form markup was getting malformed. Thanks IE. Fixes #5998. --- src/manipulation.js | 4 +++- test/unit/manipulation.js | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/manipulation.js b/src/manipulation.js index 543bbcd..2dccc75 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -197,13 +197,15 @@ jQuery.fn.extend({ // as properties will not be copied (such as the // the name attribute on an input). var html = this.outerHTML, ownerDocument = this.ownerDocument; - if ( !html ) { + if ( !html || jQuery.nodeName( this, "form" ) ) { var div = ownerDocument.createElement("div"); div.appendChild( this.cloneNode(true) ); html = div.innerHTML; } return jQuery.clean([html.replace(rinlinejQuery, "") + // Handle the case in IE 8 where action=/test/> self-closes a tag + .replace(/=([^="'>\s]+\/)>/g, '="$1">') .replace(rleadingWhitespace, "")], ownerDocument)[0]; } else { return this.cloneNode(true); diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 168c17c..f921ea1 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -757,7 +757,7 @@ test("replaceAll(String|Element|Array<Element>|jQuery)", function() { }); test("clone()", function() { - expect(30); + expect(31); equals( 'This is a normal link: Yahoo', jQuery('#en').text(), 'Assert text for #en' ); var clone = jQuery('#yahoo').clone(); equals( 'Try them out:Yahoo', jQuery('#first').append(clone).text(), 'Check for clone' ); @@ -807,6 +807,14 @@ test("clone()", function() { div = div.clone(true); equals( div.data("a"), true, "Data cloned." ); equals( div.data("b"), true, "Data cloned." ); + + var form = document.createElement("form"); + form.action = "/test/"; + var div = document.createElement("div"); + div.appendChild( document.createTextNode("test") ); + form.appendChild( div ); + + equals( jQuery(form).clone().children().length, 1, "Make sure we just get the form back." ); }); if (!isLocal) { -- 1.7.10.4