diff --git a/src/components/Component.js b/src/components/Component.js
index 02d39263a..94f8c5152 100644
--- a/src/components/Component.js
+++ b/src/components/Component.js
@@ -302,7 +302,6 @@ Component.prototype = componentProto = {
root.detached = true;
delete componentLookup[this.id];
- delete this.___rootNode;
this.___keyedElements = {};
},
diff --git a/src/morphdom/index.js b/src/morphdom/index.js
index ae6f9c3b2..c40773305 100644
--- a/src/morphdom/index.js
+++ b/src/morphdom/index.js
@@ -356,12 +356,28 @@ function morphdom(fromNode, toNode, doc, componentsContext) {
) {
var content = curFromNodeChild.nodeValue;
if (content == "F#" + curToNodeKeyOriginal) {
- var endNode = curFromNodeChild;
- while (
- endNode.nodeType !== COMMENT_NODE ||
- endNode.nodeValue !== "F/"
- )
+ var endNode = curFromNodeChild.nextSibling;
+ var depth = 0;
+ var nodeValue;
+
+ // eslint-disable-next-line no-constant-condition
+ while (true) {
+ if (endNode.nodeType === COMMENT_NODE) {
+ nodeValue = endNode.nodeValue;
+ if (nodeValue === "F/") {
+ if (depth === 0) {
+ break;
+ } else {
+ depth--;
+ }
+ } else if (
+ nodeValue.indexOf("F#") === 0
+ ) {
+ depth++;
+ }
+ }
endNode = endNode.nextSibling;
+ }
var fragment = createFragmentNode(
curFromNodeChild,
diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko b/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko
new file mode 100644
index 000000000..25f1cb598
--- /dev/null
+++ b/test/components-browser/fixtures/adjacent-nested-fragments/components/text-display/index.marko
@@ -0,0 +1,11 @@
+
+ ${type}: ${value}
+
+
+
+ $ const type = typeof value;
+
+ : ${type}
+
+
+
\ No newline at end of file
diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/index.marko b/test/components-browser/fixtures/adjacent-nested-fragments/index.marko
new file mode 100644
index 000000000..019d2d352
--- /dev/null
+++ b/test/components-browser/fixtures/adjacent-nested-fragments/index.marko
@@ -0,0 +1,17 @@
+class {
+ onCreate() {
+ this.state = {
+ show: true
+ }
+ }
+
+ hide() {
+ this.state.show = false;
+ }
+}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/components-browser/fixtures/adjacent-nested-fragments/test.js b/test/components-browser/fixtures/adjacent-nested-fragments/test.js
new file mode 100644
index 000000000..f55742b09
--- /dev/null
+++ b/test/components-browser/fixtures/adjacent-nested-fragments/test.js
@@ -0,0 +1,10 @@
+var expect = require("chai").expect;
+
+module.exports = function(helpers) {
+ var component = helpers.mount(require.resolve("./index.marko"), {});
+ var root = component.getEl("root");
+ expect(root.textContent).to.equal("number: 123: number");
+ component.hide();
+ component.update();
+ expect(root.textContent).to.equal("");
+};