diff options
author | mayx | 2025-04-02 18:17:34 +0000 |
---|---|---|
committer | mayx | 2025-04-02 18:17:34 +0000 |
commit | 1b4fd0de9b6051d2edb1fb9d59399ecef7411024 (patch) | |
tree | 8380dc6af55e772fb2e5d96ffa0e8c56e768c8a2 /js | |
parent | eee3103f93f902ca69e412418ff370ef6d9b1dcd (diff) |
Update 2 files
- /js/main.js - /search.html
Diffstat (limited to 'js')
-rw-r--r-- | js/main.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/js/main.js b/js/main.js index ad460a2..72c46a0 100644 --- a/js/main.js +++ b/js/main.js @@ -41,6 +41,50 @@ $(function () { } }); +$(function() { + function getQueryVariable(variable){ + var query = window.location.search.substring(1); + var vars = query.split("&"); + for (var i=0;i<vars.length;i++) { + var pair = vars[i].split("="); + if(pair[0] == variable){return pair[1];} + } + return(false); + } + var keyword = decodeURI(getQueryVariable("kw")); + + if (!keyword) return; + + // 转义正则表达式特殊字符,避免安全问题 + const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + // 创建不区分大小写的正则表达式(全局匹配) + const regex = new RegExp(`(${escapedKeyword})`, 'gi'); + + // 递归遍历并高亮文本节点 + function highlightTextNodes(element) { + $(element).contents().each(function() { + if (this.nodeType === Node.TEXT_NODE) { + const $this = $(this); + const text = $this.text(); + // 使用正则替换并保留原始大小写 + if (regex.test(text)) { + const replaced = text.replace(regex, '<mark>$1</mark>'); + $this.replaceWith(replaced); + } + } else if ( + this.nodeType === Node.ELEMENT_NODE && + !$(this).is('script, style, noscript, textarea') + ) { + highlightTextNodes(this); + } + }); + } + + $('section').each(function() { + highlightTextNodes(this); + }); +}); + today = new Date(); timeold = (today.getTime() - lastUpdated.getTime()); secondsold = Math.floor(timeold / 1000); |