diff --git a/lib/node_cursor.dart b/lib/node_cursor.dart index e93a372d4..0ef141163 100644 --- a/lib/node_cursor.dart +++ b/lib/node_cursor.dart @@ -95,8 +95,11 @@ class NodeCursor { var nodes = nodeList(); for (var i = 0, ii = nodes.length; i < ii; i++) { - nodes[i].remove(); + // NOTE(deboer): If elements is a list of child nodes on a node, then + // calling Node.remove() may also remove it from the list. Thus, we + // call elements.removeAt first so only one node is removed. elements.removeAt(index); + nodes[i].remove(); } return new NodeCursor(nodes); diff --git a/test/node_cursor_spec.dart b/test/node_cursor_spec.dart index 4dfb35edd..d5d978641 100644 --- a/test/node_cursor_spec.dart +++ b/test/node_cursor_spec.dart @@ -96,6 +96,16 @@ main() { expect(STRINGIFY(childCursor.elements[0]), equals('text')); }); + + it('should preserve the top-level elements', () { + var dom = $('textMoreText