Explorar o código

Update 2 files

- /js/main.js
- /search.html
mayx hai 8 meses
pai
achega
1b4fd0de9b
Modificáronse 2 ficheiros con 46 adicións e 3 borrados
  1. 44 0
      js/main.js
  2. 2 3
      search.html

+ 44 - 0
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);

+ 2 - 3
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);