使用 SlateJS 将选择范围扩展到当前单词
Expanding selection to the current word with SlateJS
使用 Slatejs (v0.47) 如何扩展当前选择(从折叠开始)以包含当前单词?
所以(假设[]
表示当前节)
如果我从
开始
this is some te[]xt
如何以编程方式将选择范围扩大到
this is some [text]
?
最终成功了。
export const word_selection = (editor) => {
const {value} = editor
const {selection, startText} = value
const {start, isExpanded} = selection
if (isExpanded) {
return value.fragment.text
}
const {text} = startText
const {offset} = start
let left = text.slice(0, offset).search(/\S+$/)
if (left === -1) {
// character before the cursor is a space, selection starts at the cursor
left = offset
}
let right = text.slice(offset).search(/\s/)
if (right < 0) {
// character after teh cursor is a space, selection ends at the cursor
right = text.length
} else {
right = right + offset
}
if (left === right) {
// nothing to select
return ''
}
editor.moveAnchorBackward(offset - left).moveFocusForward(right - offset)
return value.fragment.text
}
使用 Slatejs (v0.47) 如何扩展当前选择(从折叠开始)以包含当前单词?
所以(假设[]
表示当前节)
如果我从
开始this is some te[]xt
如何以编程方式将选择范围扩大到
this is some [text]
?
最终成功了。
export const word_selection = (editor) => {
const {value} = editor
const {selection, startText} = value
const {start, isExpanded} = selection
if (isExpanded) {
return value.fragment.text
}
const {text} = startText
const {offset} = start
let left = text.slice(0, offset).search(/\S+$/)
if (left === -1) {
// character before the cursor is a space, selection starts at the cursor
left = offset
}
let right = text.slice(offset).search(/\s/)
if (right < 0) {
// character after teh cursor is a space, selection ends at the cursor
right = text.length
} else {
right = right + offset
}
if (left === right) {
// nothing to select
return ''
}
editor.moveAnchorBackward(offset - left).moveFocusForward(right - offset)
return value.fragment.text
}