uFuzzy provides a highlight utility to wrap matched character ranges in HTML tags or custom DOM elements.
Basic HTML Highlighting
Use uFuzzy.highlight(text, ranges) to wrap matches in <mark> tags.
let innerHTML = '';
for (let i = 0; i < order.length; i++) {
let infoIdx = order[i];
innerHTML += uFuzzy.highlight(
haystack[info.idx[infoIdx]],
info.ranges[infoIdx],
) + '<br>';
}
Custom Marking Function
You can provide a custom function to define how matches are wrapped (e.g., using <b> tags).
const mark = (part, matched) => matched ? '<b>' + part + '</b>' : part;
for (let i = 0; i < order.length; i++) {
let infoIdx = order[i];
innerHTML += uFuzzy.highlight(
haystack[info.idx[infoIdx]],
info.ranges[infoIdx],
mark,
) + '<br>';
}
DOM/JSX Element Highlighting
For complex UI frameworks, you can provide custom mark and append functions to generate actual DOM elements instead of strings.
const mark = (part, matched) => {
let el = matched ? document.createElement('mark') : document.createElement('span');
el.textContent = part;
return el;
};
const append = (accum, part) => { accum.push(part); };
for (let i = 0; i < order.length; i++) {
let infoIdx = order[i];
let matchEl = document.createElement('div');
let parts = uFuzzy.highlight(
haystack[info.idx[infoIdx]],
info.ranges[infoIdx],
mark,
[],
append,
);
matchEl.append(...parts);
domElems.push(matchEl);
}
let innerHTML = '';
for (let i = 0; i < order.length; i++) {
let infoIdx = order[i];
innerHTML += uFuzzy.highlight(
haystack[info.idx[infoIdx]],
info.ranges[infoIdx],
) + '<br>';
}
console.log(innerHTML);