diff options
author | David Serduke <davidserduke@gmail.com> | 2008-01-23 03:54:23 +0000 |
---|---|---|
committer | David Serduke <davidserduke@gmail.com> | 2008-01-23 03:54:23 +0000 |
commit | 1faed11e3c0752981d8b01e1272fb3a72272f966 (patch) | |
tree | b850850abb3cbe042d327016c2225d7996bd9aab | |
parent | e7fef859f10045a296368e82d7bbe69924d338c2 (diff) | |
download | jquery-1faed11e3c0752981d8b01e1272fb3a72272f966.tar.gz jquery-1faed11e3c0752981d8b01e1272fb3a72272f966.zip |
Fix #2184 by using the jQuery.clean() function instead of a direct innerHTML assignment in the clone() function for IE.
-rw-r--r-- | src/core.js | 6 | ||||
-rw-r--r-- | test/unit/core.js | 14 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/core.js b/src/core.js index b90427b4d..4cb0a22fe 100644 --- a/src/core.js +++ b/src/core.js @@ -303,11 +303,9 @@ jQuery.fn = jQuery.prototype = { // as properties will not be copied (such as the // the name attribute on an input). var clone = this.cloneNode(true), - container = document.createElement("div"), - container2 = document.createElement("div"); + container = document.createElement("div"); container.appendChild(clone); - container2.innerHTML = container.innerHTML; - return container2.firstChild; + return jQuery.clean([container.innerHTML])[0]; } else return this.cloneNode(true); }); diff --git a/test/unit/core.js b/test/unit/core.js index a5a59c3a1..7b0aad4ed 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -955,11 +955,23 @@ test("find(String)", function() { }); test("clone()", function() { - expect(4); + expect(20); ok( 'This is a normal link: Yahoo' == $('#en').text(), 'Assert text for #en' ); var clone = $('#yahoo').clone(); ok( 'Try them out:Yahoo' == $('#first').append(clone).text(), 'Check for clone' ); ok( 'This is a normal link: Yahoo' == $('#en').text(), 'Reassert text for #en' ); + + var cloneTags = [ + "<table/>", "<tr/>", "<td/>", "<div/>", + "<button/>", "<ul/>", "<ol/>", "<li/>", + "<input type='checkbox' />", "<select/>", "<option/>", "<textarea/>", + "<tbody/>", "<thead/>", "<tfoot/>", "<iframe/>" + ]; + for (var i = 0; i < cloneTags.length; i++) { + var j = $(cloneTags[i]); + equals( j[0].tagName, j.clone()[0].tagName, 'Clone a <' + cloneTags[i].substring(1)); + } + // using contents will get comments regular, text, and comment nodes var cl = $("#nonnodes").contents().clone(); ok( cl.length >= 2, "Check node,textnode,comment clone works (some browsers delete comments on clone)" ); |