summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormayx <mayx@outlook.com>2025-04-02 20:17:34 +0200
committermayx <mayx@outlook.com>2025-04-02 20:17:34 +0200
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);