$(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, '$1'); $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 = $('