A package to enhance your developing experience with selection, using the Selection API and Range API.
The latest source code and releases are on GitHub.
WARNING: This package is under heavy development, the APIs may be changed in the future!
The developing branch is
dev
Any contribution would be appreciate <3
I specially need support on unit testing to make the API as stable as possible!
defineSelectable
attach neccessary attributes to the element, got checked and called by default in some others APIsgetSelection
get the selection from the 2 sub APIsgetSelectionInputOrTextarea
get the selection text, start, end and select directiongetSelectionContenteditable
get the selection HTML, start, end, select direction is not supported
getSelectionRect
get the coresponding pixel-position of the selection by getting their bouding rectssetSelection
set the selection by using the 3 sub APIssetSelectionNode
setSelectionInputOrTextareaElement
setSelectionContenteditableElement
setHighlight
create an underline by using the bounding boxes fromgetSelectionRect
removeSelectionContent
remove the selected contentreplaceSelectionContent
replace the selected content with a new contentattachFloating
attach a floating tooltip to the selection bounding boxkeepSelection
keep the selection from being deselected, helpful for interacting with Google Translate or Grammarly-like featurewatchSelection
watch the selection change and provide a callback hook for event handling
npm i @selectjs/core
# Or with pnpm
pnpm add @selectjs/core
# Or with yarn
yarn add @selectjs/core
Select any editable elements, input, textarea or element with contenteditable attribute from character to character using start
and end
options.
import { setSelection } from "@selectjs/core"
const element = document.querySelector('input')
// const element = document.querySelector('textarea')
// const element = document.querySelector('[contenteditable]')
setSelection(element, { start: 0, end: 5 })
Option | Type | Description |
---|---|---|
start |
number |
Start offset of the selection |
end |
number |
End offset of the selection |
keep |
boolean |
Keep selecting the element until the selection is changed to empty and the element got blur |
Get the current selection information of the selected element.
import { getSelection } from "@selectjs/core"
const element = document.querySelector('input')
// const element = document.querySelector('textarea')
// const element = document.querySelector('[contenteditable]')
const result = getSelection(element)