diff --git a/packages/slate/src/models/node.js b/packages/slate/src/models/node.js index bb8dac22d..651e4dde9 100644 --- a/packages/slate/src/models/node.js +++ b/packages/slate/src/models/node.js @@ -1087,10 +1087,12 @@ class Node { getMarksAtRangeAsArray(range) { range = range.normalize(this) if (range.isUnset) return [] - if (range.isCollapsed) return this.getMarksAtCollaspsedRangeAsArray(range) + if (range.isCollapsed) return this.getMarksAtCollapsedRangeAsArray(range) return this.getCharactersAtRange(range).reduce((memo, char) => { - char.marks.toArray().forEach(c => memo.push(c)) + if (char) { + char.marks.toArray().forEach(c => memo.push(c)) + } return memo }, []) } @@ -1105,13 +1107,12 @@ class Node { getInsertMarksAtRangeAsArray(range) { range = range.normalize(this) if (range.isUnset) return [] - if (range.isCollapsed) return this.getMarksAtCollaspsedRangeAsArray(range) + if (range.isCollapsed) return this.getMarksAtCollapsedRangeAsArray(range) const text = this.getDescendant(range.startKey) const char = text.characters.get(range.startOffset) - if (!char) { - return [] - } + if (!char) return [] + return char.marks.toArray() } @@ -1122,7 +1123,7 @@ class Node { * @return {Array} */ - getMarksAtCollaspsedRangeAsArray(range) { + getMarksAtCollapsedRangeAsArray(range) { if (range.isUnset) return [] const { startKey, startOffset } = range @@ -1136,11 +1137,15 @@ class Node { return [] } const char = previous.characters.get(previous.text.length - 1) + if (!char) return [] + return char.marks.toArray() } const text = this.getDescendant(startKey) const char = text.characters.get(startOffset - 1) + if (!char) return [] + return char.marks.toArray() } @@ -1154,7 +1159,7 @@ class Node { getActiveMarksAtRangeAsArray(range) { range = range.normalize(this) if (range.isUnset) return [] - if (range.isCollapsed) return this.getMarksAtCollaspsedRangeAsArray(range) + if (range.isCollapsed) return this.getMarksAtCollapsedRangeAsArray(range) // Otherwise, get a set of the marks for each character in the range. const chars = this.getCharactersAtRange(range) @@ -1164,7 +1169,8 @@ class Node { let memo = first.marks chars.slice(1).forEach(char => { - memo = memo.intersect(char.marks) + const marks = char ? char.marks : [] + memo = memo.intersect(marks) return memo.size != 0 })