diff --git a/src/models/node.js b/src/models/node.js index 81347e194..184edf6d9 100644 --- a/src/models/node.js +++ b/src/models/node.js @@ -178,12 +178,19 @@ const Node = { */ forEachDescendant(iterator) { - return this.nodes.forEach((child, i, nodes) => { + let returned // Returned value of iterator. False to break from loop + + this.nodes.forEach((child, i, nodes) => { if (iterator(child, i, nodes) === false) { - return false + return returned = false + } + + if (child.kind != 'text') { + return returned = child.forEachDescendant(iterator) } - if (child.kind != 'text') child.forEachDescendant(iterator) }) + + return returned }, /** diff --git a/src/models/selection.js b/src/models/selection.js index 039cb09e8..1ae5f4416 100644 --- a/src/models/selection.js +++ b/src/models/selection.js @@ -332,10 +332,10 @@ class Selection extends new Record(DEFAULTS) { // If `isBackward` is not set, derive it. if (isBackward == null) { - if (anchorKey === focusKey) { + if (anchorNode.key === focusNode.key) { isBackward = anchorOffset > focusOffset } else { - isBackward = !node.areDescendantSorted(anchorKey, focusKey) + isBackward = !node.areDescendantSorted(anchorNode.key, focusNode.key) } }