Vue component to highlight words within a larger body of text
npm install vue-highlight-words:information_source: This is the branch for vue-highlight-words 2 (For Vue 3). If you are looking for Vue 2.0 support, please check out 1.0 branch
> A simple port from react-highlight-words
>
> Vue component to highlight words within a larger body of text.
It uses render to handle the highlighted text instead of using v-html or el.innerHtml.
```
npm i --save vue-highlight-words
To use it, just provide it with an array of search terms and a body of text to highlight.
`html
// attrs on component are applied to the wrapper
:searchWords="keywords"
:autoEscape="true"
:textToHighlight="text"/>
`
And the Highlighter will mark all occurrences of search terms within the text:

| Property | Type | Required? | Description |
| :------------------- | :------------------ | :-------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| activeClassName | String | | The class name to be applied to an active match. Use along with activeIndex |activeClassName
| activeIndex | Number | | Specify the match index that should be actively highlighted. Use along with |activeIndex
| activeStyle | Object | | The inline style to be applied to an active match. Use along with |searchWords
| autoEscape | Boolean | | Escape characters in which are meaningful in regular expressions |false
| caseSensitive | Boolean | | Search should be case sensitive; defaults to |findChunks
| findChunks | Function | | Use a custom function to search for matching chunks. This makes it possible to use arbitrary logic when looking for matches. See the default function in highlight-words-core for signature. Have a look at the custom findChunks example on how to use it. |(text: string): string
| highlightClassName | String | | CSS class name applied to highlighted text |
| highlightStyle | Object | | Inline styles applied to highlighted text |
| sanitize | Function | | Process each search word and text to highlight before comparing (eg remove accents); signature |autoEscape
| searchWords | Array is set. |
| textToHighlight | String | ✓ | Text to highlight matches in |
Use a default slot with v-slot props
`ts
type SlotProps = HighlighterItem[]
type HighlighterItem = {
text: string // chunk of text to render
attrs: HighlightAttrs
chunk: Chunk
}
type HighlightAttrs = {
class: string // class for highlight tag: highlightClassNames
key: number // index of the chunk
style: Partial
highlightIndex: number // index of highlight tag
}
type Chunk = {
start: number
end: number
highlight: boolean
}
`
For example:
`diff
// attrs on component are applied to the wrapper
:searchWords="keywords"
:autoEscape="true"
- :textToHighlight="text"/>
+ :textToHighlight="text"
+ v-slot="items">
+
+ + :class="{chunk.highlight: 'highlight' : ''}"
+ >{{text}}
+
+
`
``
pnpm install
``
pnpm dev
``
pnpm build
```
pnpm lint