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 = 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); }); });});
|