mirror of
https://codeberg.org/mayx/pages
synced 2026-02-16 06:34:51 +08:00
update
This commit is contained in:
77
assets/js/main_new.js
Normal file
77
assets/js/main_new.js
Normal file
@@ -0,0 +1,77 @@
|
||||
$(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 = $('div.highlight');
|
||||
|
||||
$codeBlocks.each(function() {
|
||||
var $copyButton = $('<button>', {
|
||||
class: 'copy',
|
||||
type: 'button',
|
||||
text: '📋'
|
||||
});
|
||||
|
||||
$(this).append($copyButton);
|
||||
|
||||
$copyButton.on('click', function() {
|
||||
var code = $(this).siblings('pre').find('code').text().trim();
|
||||
var $button = $(this);
|
||||
|
||||
navigator.clipboard.writeText(code)
|
||||
.then(function() {
|
||||
$button.text('✅');
|
||||
})
|
||||
.catch(function(err) {
|
||||
$button.text('❌');
|
||||
console.error('复制失败:', err);
|
||||
})
|
||||
.finally(function() {
|
||||
setTimeout(function() {
|
||||
$button.text('📋');
|
||||
}, 1500);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user