You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
$(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); }); }); });});
|