diff --git a/mithril.js b/mithril.js index b39c7b98..b3b260fd 100644 --- a/mithril.js +++ b/mithril.js @@ -53,9 +53,10 @@ Mithril = m = new function app(window) { cached[cacheCount++] = item } if (!intact) { - if (nodes.length < cached.nodes.length) cached.nodes = cached.nodes.filter(function(node) {return node.parentNode !== null}) for (var i = 0; i < data.length; i++) if (cached[i] !== undefined) nodes = nodes.concat(cached[i].nodes) - for (var i = nodes.length, node; node = cached.nodes[i]; i++) if (node.parentNode !== null) node.parentNode.removeChild(node) + for (var i = nodes.length, node; node = cached.nodes[i]; i++) { + if (node.parentNode !== null && node.parentNode.childNodes.length != nodes.length) node.parentNode.removeChild(node) + } for (var i = cached.nodes.length, node; node = nodes[i]; i++) if (node.parentNode === null) parentElement.appendChild(node) if (data.length < cached.length) cached.length = data.length cached.nodes = nodes diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index 69e5040c..777bf705 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -378,10 +378,25 @@ function testMithril(mock) { return unloaded === true }) test(function() { + //https://github.com/lhorie/mithril.js/issues/87 var root = mock.document.createElement("div") m.render(root, m("div", [[m("a"), m("a")], m("button")])) m.render(root, m("div", [[m("a")], m("button")])) - return root.childNodes[0].childNodes.length == 2 + return root.childNodes[0].childNodes.length == 2 && root.childNodes[0].childNodes[1].nodeName == "BUTTON" + }) + test(function() { + //https://github.com/lhorie/mithril.js/issues/87 + var root = mock.document.createElement("div") + m.render(root, m("div", [m("a"), m("b"), m("button")])) + m.render(root, m("div", [m("a"), m("button")])) + return root.childNodes[0].childNodes.length == 2 && root.childNodes[0].childNodes[1].nodeName == "BUTTON" + }) + test(function() { + //https://github.com/lhorie/mithril.js/issues/99 + var root = mock.document.createElement("div") + m.render(root, m("div", [m("img"), m("h1")])) + m.render(root, m("div", [m("a")])) + return root.childNodes[0].childNodes.length == 1 && root.childNodes[0].childNodes[0].nodeName == "A" }) //end m.render