diff options
Diffstat (limited to 'assets')
-rw-r--r-- | assets/js/main.js | 102 | ||||
-rw-r--r-- | assets/js/main_new.js | 78 |
2 files changed, 88 insertions, 92 deletions
diff --git a/assets/js/main.js b/assets/js/main.js index 644e2b6..3a17db6 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -13,28 +13,19 @@ var talkAPI = BlogAPI + "/ai_chat"; $(function () { $backToTopFun(); }); })(); $(function () { - $("div#landlord").mouseenter(function () { - $("div.live_ico_box").fadeIn(); - }); - $("div#landlord").mouseleave(function () { - $("div.live_ico_box").fadeOut(); - }); - function showHitS(hits) { - $.get(BlogAPI + "/count_click?id=" + hits.id, function (data) { - hits.innerHTML = Number(data); - }); - } function showHitCount() { - var visitors = $(".visitors-index"); - for (var i = 0; i < visitors.length; i++) { - showHitS(visitors[i]); - } - + $(".visitors-index").each(function() { + var $elem = $(this); + $.get(BlogAPI + "/count_click?id=" + $elem.attr('id'), function(data) { + $elem.text(Number(data)); + }); + }); } + function addCount() { - var visitors = $(".visitors"); - $.get(BlogAPI + "/count_click_add?id=" + visitors[0].id, function (data) { - visitors[0].innerHTML = Number(data); + var $visitor = $(".visitors:first"); + $.get(BlogAPI + "/count_click_add?id=" + $visitor.attr('id'), function(data) { + $visitor.text(Number(data)); }); } if ($('.visitors').length == 1) { @@ -44,79 +35,6 @@ $(function () { } }); -$(function () { - const urlParams = new URLSearchParams(window.location.search); - const keyword = urlParams.get('kw')?.trim(); - - if (!keyword) return; - - // 转义正则表达式特殊字符,避免安全问题 - const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - // 创建不区分大小写的正则表达式(全局匹配) - const regex = new RegExp(`(${escapedKeyword})`, 'gi'); - - // 递归遍历并高亮文本节点 - const escapeHTML = str => str.replace(/[&<>"']/g, - tag => ({ - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }[tag] || tag)); - function highlightTextNodes(element) { - $(element).contents().each(function () { - if (this.nodeType === Node.TEXT_NODE) { - const $this = $(this); - const text = escapeHTML($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); - }); -}); -$(function () { - var codeBlocks = document.querySelectorAll('div.highlight'); - - codeBlocks.forEach(function (codeBlock) { - var copyButton = document.createElement('button'); - copyButton.className = 'copy'; - copyButton.type = 'button'; - copyButton.innerText = '📋'; - - codeBlock.append(copyButton); - - copyButton.addEventListener('click', function () { - var code = codeBlock.querySelector('pre code').innerText.trim(); - window.navigator.clipboard.writeText(code) - .then(() => { - copyButton.innerText = '✅'; - }) - .catch(err => { - copyButton.innerText = '❌'; - console.error('Failed to copy:', err); - }); - - setTimeout(function () { - copyButton.innerText = '📋'; - }, 1500); - }); - }); -}); - today = new Date(); timeold = (today.getTime() - lastUpdated.getTime()); secondsold = Math.floor(timeold / 1000); diff --git a/assets/js/main_new.js b/assets/js/main_new.js new file mode 100644 index 0000000..fd0170f --- /dev/null +++ b/assets/js/main_new.js @@ -0,0 +1,78 @@ +$(function () { + $("div#landlord").mouseenter(function () { + $("div.live_ico_box").fadeIn(); + }); + $("div#landlord").mouseleave(function () { + $("div.live_ico_box").fadeOut(); + }); + + const urlParams = new URLSearchParams(window.location.search); + const keyword = urlParams.get('kw')?.trim(); + + if (!keyword) return; + + // 转义正则表达式特殊字符,避免安全问题 + const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + // 创建不区分大小写的正则表达式(全局匹配) + const regex = new RegExp(`(${escapedKeyword})`, 'gi'); + + // 递归遍历并高亮文本节点 + const escapeHTML = str => str.replace(/[&<>"']/g, + tag => ({ + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }[tag] || tag)); + function highlightTextNodes(element) { + $(element).contents().each(function () { + if (this.nodeType === Node.TEXT_NODE) { + const $this = $(this); + const text = escapeHTML($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); + }); + + var codeBlocks = document.querySelectorAll('div.highlight'); + + codeBlocks.forEach(function (codeBlock) { + var copyButton = document.createElement('button'); + copyButton.className = 'copy'; + copyButton.type = 'button'; + copyButton.innerText = '📋'; + + codeBlock.append(copyButton); + + copyButton.addEventListener('click', function () { + var code = codeBlock.querySelector('pre code').innerText.trim(); + window.navigator.clipboard.writeText(code) + .then(() => { + copyButton.innerText = '✅'; + }) + .catch(err => { + copyButton.innerText = '❌'; + console.error('Failed to copy:', err); + }); + + setTimeout(function () { + copyButton.innerText = '📋'; + }, 1500); + }); + }); +}); \ No newline at end of file |