我正在尝试替换Draft.js中的最后一个插入
例如,
Orignal string - > aaazzz
在中间插入'bbb'后 - > aaabbbzzz
用'ccc'替换最后一次插入 - > aaaccczzz
将'ddd'替换为最后一次插入 - > aaadddzzz
...
我认为保存插入起点的一种方法。插入后,保存终点。然后我可以稍后更换范围
这是我的插入代码
const selection1 = editorState.getSelection();
const contentState1 = editorState.getCurrentContent();
const contentState2 = Modifier.insertText(contentState, selection, text);
const editorState2 = EditorState.push(editorState, newContentState);
const selection2 = newEditorState.getSelection();
// here I don't know how to get the range based on selection1 and selection2
我可以用
const start = selection1.getStartOffset();
const end = selection2.getEndOffset();
得到两个数字,分别是起点和终点。
基于
的定义replaceText(
contentState: ContentState,
rangeToReplace: SelectionState,
text: string,
inlineStyle?: DraftInlineStyle,
entityKey?: ?string
): ContentState
我需要一个新的选择。如何使用这两个数字OR selection1和selection2创建选择?有没有像
这样的功能createSelection(start, end) // not exist
答案 0 :(得分:2)
var selectionState = SelectionState.createEmpty('blockkey');
var updatedSelection = selectionState.merge({
focusOffset: 0,
anchorOffset:20,
});
所以你需要获得块密钥然后设置偏移量。开始/结束对应于锚点/焦点,因为在你的情况下。
答案 1 :(得分:1)
先保存旧editorState
。
然后插入当前的editorState
。
当我想插入另一个,而不是插入到当前editorState
时,我会再次插入旧editorState
的副本。
希望这可以给有同样问题的人一些想法。