国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS模擬瀏覽器實現全局搜索功能

2019-11-19 10:50:12
字體:
來源:轉載
供稿:網友

需要像瀏覽器的全局搜索一樣,搜索指定模塊的對應值,然后將匹配到的內容添加背景顏色等。

思路

  • 需要取到當前指定區域的所有內容
  • 然后在取到的內容中找到搜索的內容加上對應的背景顏色
  • 最后在將修改后的內容渲染到頁面上

實現

  • 利用innerHTML取到對應模塊的內容
  • 編寫對應的正則表達式來匹配搜索的內容
  • 利用String.prototype.replace替換匹配到的內容
  • 最后在渲染到頁面上

代碼實現:

let wrap = document.querySelector('.wrap');let innerHTML = wrap.innerHTML;let reg = new RegExp(query, 'g');innerHTML = innerHTML.replace(reg, '<span style="color: #000; background-color: #e3e4e5">' + query + '</span>');wrap.innerHTML = innerHTML;

具體的實現搜索實現就完成了,但是上面代碼還有個缺陷,就是更換搜索內容時,之前搜索的內容還是具有選中的樣式,那么接下來完善功能:

let preQuery = ''; // 上一次搜索的內容let wrapDom = ''; // 搜索區域的dom元素function searchFn(dom, query) {  let wrap = wrapDom || document.querySelector(dom);  let innerHTML = wrap.innerHTML;  if (!preQuery) {    let preReg = new RegExp('<span style="color: #000; background-color: #e3e4e5">' + preQuery + '</span>', 'g');    innerHTML = innerHTML.replace(preReg, preQuery);  }  if (query) {    let reg = new RegExp(query, 'g');    innerHTML = innerHTML.replace(reg, '<span style="color: #000; background-color: #e3e4e5">' + query + '</span>');  }  wrap.innerHTML = innerHTML;  preQuery = query;}

至此搜索高亮的功能就已經實現了。

注意事項

搜索區域的dom元素中不能使用title屬性,因為當使用title屬性時也會把對應的title屬性內容替換,頁面渲染時就會產生問題,其實可以將匹配規則的正則表達式重寫,但是能力有限,不知道如何編寫排除title屬性的正則表達式

如果使用Vue等框架編寫時,搜索完之后vue相關的事件和屬性全都失效了,因為我們這樣是直接把dom給換了,這種情況下有兩種解決方法:

搜索完成之后,再實例化一次vue

function resetVm() {  vm.destroy()  vm = new Vue({...})}

但是這樣會有個問題,重新實例化vue實例之后,搜索內容就沒了

不使用vue,可以用jQuery去實現頁面,這樣就不會有事件失效的問題

總結

以上所述是小編給大家介紹的JS模擬瀏覽器實現全局搜索功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 独山县| 达孜县| 施秉县| 和田县| 芦溪县| 临桂县| 呼伦贝尔市| 姜堰市| 林周县| 文安县| 开化县| 岳西县| 平原县| 兴业县| 射洪县| 黄陵县| 正阳县| 阿拉善右旗| 江北区| 突泉县| 久治县| 广州市| 兴国县| 固安县| 巢湖市| 广丰县| 东兰县| 林芝县| 宁海县| 石首市| 昆山市| 韶关市| 武功县| 红原县| 八宿县| 平果县| 台南市| 砀山县| 齐河县| 弋阳县| 新乡县|