| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  | $(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); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2025-05-16 13:10:01 +00:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-19 08:51:38 +00:00
										 |  |  | $(function() { | 
					
						
							|  |  |  |     var $codeBlocks = $('div.highlight'); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-19 08:51:38 +00:00
										 |  |  |     $codeBlocks.each(function() { | 
					
						
							|  |  |  |         var $copyButton = $('<button>', { | 
					
						
							|  |  |  |             class: 'copy', | 
					
						
							|  |  |  |             type: 'button', | 
					
						
							|  |  |  |             text: '📋' | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-19 08:51:38 +00:00
										 |  |  |         $(this).append($copyButton); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-19 08:51:38 +00:00
										 |  |  |         $copyButton.on('click', function() { | 
					
						
							|  |  |  |             var code = $(this).siblings('pre').find('code').text().trim(); | 
					
						
							|  |  |  |             var $button = $(this); | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             navigator.clipboard.writeText(code) | 
					
						
							|  |  |  |                 .then(function() { | 
					
						
							|  |  |  |                     $button.text('✅'); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2025-06-19 08:51:38 +00:00
										 |  |  |                 .catch(function(err) { | 
					
						
							|  |  |  |                     $button.text('❌'); | 
					
						
							|  |  |  |                     console.error('复制失败:', err); | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  |                 .finally(function() { | 
					
						
							|  |  |  |                     setTimeout(function() { | 
					
						
							|  |  |  |                         $button.text('📋'); | 
					
						
							|  |  |  |                     }, 1500); | 
					
						
							| 
									
										
										
										
											2025-05-11 16:12:22 +00:00
										 |  |  |                 }); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }); |