summary refs log tree commit diff
diff options
context:
space:
mode:
authormayx2025-04-02 18:17:34 +0000
committermayx2025-04-02 18:17:34 +0000
commit1b4fd0de9b6051d2edb1fb9d59399ecef7411024 (patch)
tree8380dc6af55e772fb2e5d96ffa0e8c56e768c8a2
parenteee3103f93f902ca69e412418ff370ef6d9b1dcd (diff)
Update 2 files
- /js/main.js
- /search.html
-rw-r--r--js/main.js44
-rw-r--r--search.html5
2 files changed, 46 insertions, 3 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);
diff --git a/search.html b/search.html
index 1b01972..7f392cd 100644
--- a/search.html
+++ b/search.html
@@ -8,8 +8,7 @@ title: 搜索
 <ul id="results-container"></ul>
 <script src="/js/simple-jekyll-search.min.js"></script>
 <script>
-function getQueryVariable(variable)
-{
+function getQueryVariable(variable){
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i=0;i<vars.length;i++) {
@@ -29,7 +28,7 @@ getSearchJSON(function(json){
      searchInput: sbox,
      resultsContainer: document.getElementById('results-container'),
      json: json,
-     searchResultTemplate: '<p><li>{date} - <a href="{url}">{title}</a></li></p>',
+     searchResultTemplate: '<p><li>{date} - <a href="{url}?kw={query}">{title}</a></li></p>',
      limit: 20
   });
   sjs.search(mykeyword);