JS-查询 高亮匹配关键字

本文分享了一种基于项目需求的个性化搜索关键字高亮显示方法,通过简单的代码实现了搜索框中关键字的匹配并进行颜色高亮,展示了实现原理及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  基于项目的个性化需求,根据搜索框的关键字匹配加颜色高亮显示,折腾半天后总算实现了功能,松了一口气,小有成就感。现将代码分享如下,其实不难,刚开始还在网上找资料正则匹配,往复杂的方向跑了。。。回过头来反而用不复杂的方法实现了,不禁感慨,有时敲代码就是这样,蓦然回首,其实就简单几行代码。好了,嘴碎完上效果图和代码。

效果图

代码 

  请注意:以下代码是截取实现功能部分,各位小伙伴能看懂实现原理即可。

var searchVal= $('#searchVal').val();

function(cellval){
    if(cellval.indexOf(searchVal) !== -1){
	    var newVal = cellval.replace(searchVal, "<font color='blue'>" + searchVal+ "</font>");
	    return (newVal);
    }else{
	    return (cellval);
    }
}

在使用 `pdfjs-dist` 库时实现关键字高亮,通常需要以下几个步骤来完成。`pdfjs-dist` 是一个用于解析和渲染 PDF 文件的 JavaScript 库,但它本身并不直接支持文本搜索或高亮功能。因此,可以通过结合其他前端技术(如 Vue 或原生 JavaScript)来实现这一需求。 ### 1. 使用 `pdfjs-dist` 渲染 PDF 内容 首先,通过 `pdfjs-dist` 将 PDF 文件逐页渲染到页面上。每一页的内容可以渲染为 `<canvas>` 元素或者提取文本内容进行展示[^2]。 ```javascript import * as pdfjsLib from 'pdfjs-dist'; import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry'; pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker; const loadingTask = pdfjsLib.getDocument('your_file.pdf').promise; loadingTask.promise.then(pdf => { pdf.getPage(1).then(page => { const canvas = document.getElementById('pdfCanvas'); const context = canvas.getContext('2d'); const viewport = page.getViewport({ scale: 1.5 }); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport }; page.render(renderContext); }); }); ``` ### 2. 提取文本并实现关键字高亮 由于 `pdfjs-dist` 不提供文本层的直接访问方式,需要从每一页中提取文本内容,并将其插入到 DOM 中以便进行高亮处理。可以通过 `getTextContent()` 方法获取文本信息[^1]。 ```javascript page.getTextContent().then(textContent => { const textItems = textContent.items.map(item => item.str).join(''); // 插入文本到 DOM 中 const textLayer = document.createElement('div'); textLayer.className = 'text-layer'; textLayer.textContent = textItems; document.body.appendChild(textLayer); }); ``` ### 3. 实现关键字高亮逻辑 在 Vue 框架中,可以通过自定义指令实现关键字高亮功能。以下是一个基于 Vue 的自定义指令示例,它会在绑定的元素中查找匹配关键字并用 `<span>` 标签包裹,从而应用样式高亮显示[^3]。 #### 自定义指令实现 ```javascript Vue.directive('highlight', { bind(el, binding) { const keyword = binding.value; if (keyword) { const regex = new RegExp(keyword, 'gi'); const content = el.textContent; el.innerHTML = content.replace(regex, '<span class="highlight">$&</span>'); } }, update(el, binding) { const keyword = binding.value; if (keyword) { const regex = new RegExp(keyword, 'gi'); const content = el.textContent; el.innerHTML = content.replace(regex, '<span class="highlight">$&</span>'); } } }); ``` #### 在模板中使用 ```html <div class="pdf-text" v-highlight="searchKeyword">{{textContent}}</div> ``` #### 样式定义 ```css .highlight { background-color: yellow; } ``` ### 4. 结合 PDF 渲染与高亮功能 为了确保高亮效果与 PDF 页面内容对齐,可以在渲染 PDF 页面的同时提取其文本内容,并将这些文本内容插入到覆盖层(overlay)中,然后应用高亮逻辑。这样可以保证用户看到的高亮部分与实际 PDF 内容一致[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值