summary refs log tree commit diff
path: root/js/main.js
diff options
context:
space:
mode:
authormayx2025-04-02 18:17:34 +0000
committermayx2025-04-02 18:17:34 +0000
commit1b4fd0de9b6051d2edb1fb9d59399ecef7411024 (patch)
tree8380dc6af55e772fb2e5d96ffa0e8c56e768c8a2 /js/main.js
parenteee3103f93f902ca69e412418ff370ef6d9b1dcd (diff)
Update 2 files
- /js/main.js
- /search.html
Diffstat (limited to 'js/main.js')
-rw-r--r--js/main.js44
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);