亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-22 09:18:55 來源:腳本之家 閱讀:380 作者:loveEternity 欄目:web開發

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

思路

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

實現

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

代碼實現:

let wrap = document.querySelector('.wrap');
let innerHTML = wrap.innerHTML;
let reg = new RegExp(query, 'g');
innerHTML = innerHTML.replace(reg, '<span >' + 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 >' + preQuery + '</span>', 'g');
    innerHTML = innerHTML.replace(preReg, preQuery);
  }
  if (query) {
    let reg = new RegExp(query, 'g');
    innerHTML = innerHTML.replace(reg, '<span >' + 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模擬瀏覽器實現全局搜索功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南昌市| 寿宁县| 宜黄县| 延长县| 惠来县| 信阳市| 瓦房店市| 松江区| 涟水县| 明溪县| 磐安县| 镇沅| 伊金霍洛旗| 马尔康县| 裕民县| 聂荣县| 军事| 定州市| 关岭| 西充县| 南澳县| 白玉县| 易门县| 永新县| 阿拉善右旗| 闽侯县| 娱乐| 安康市| 赤水市| 普陀区| 威信县| 泰顺县| 灵川县| 道真| 绍兴市| 南江县| 乌拉特中旗| 壤塘县| 肃宁县| 康平县| 阳城县|