summaryrefslogtreecommitdiff
path: root/assets/js/main_new.js
diff options
context:
space:
mode:
authormayx <mayx@outlook.com>2025-05-11 18:12:22 +0200
committermayx <mayx@outlook.com>2025-05-11 18:12:22 +0200
commitac554c55359912bf8928b51d6692f9d8fbd8c6b9 (patch)
tree294e9c4e1fe230c03d296ea05c7ff1c6ae4b19a9 /assets/js/main_new.js
parent97e0ef3c8176e0490030a3a48c0c613eef0af4d3 (diff)
Update 3 files
- /assets/js/main.js - /assets/js/main_new.js - /_layouts/default.html
Diffstat (limited to 'assets/js/main_new.js')
-rw-r--r--assets/js/main_new.js78
1 files changed, 78 insertions, 0 deletions
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 => ({
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#39;'
+ }[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