如何在Draft.js中基于开始和结束创建选择?

时间:2017-10-26 23:41:26

标签: javascript reactjs draftjs

我正在尝试替换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

2 个答案:

答案 0 :(得分:2)

文件说:

var selectionState = SelectionState.createEmpty('blockkey');
var updatedSelection = selectionState.merge({
  focusOffset: 0,
  anchorOffset:20,
});

所以你需要获得块密钥然后设置偏移量。开始/结束对应于锚点/焦点,因为在你的情况下。

答案 1 :(得分:1)

我改变了主意。我的解决方案是

  1. 先保存旧editorState

  2. 然后插入当前的editorState

  3. 当我想插入另一个,而不是插入到当前editorState时,我会再次插入旧editorState的副本。

  4. 希望这可以给有同样问题的人一些想法。