var isMatch = true; var dataTitle = data.title.trim().toLowerCase(); var dataContent = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase(); var dataUrl = data.url; var indexTitle = -1; var indexContent = -1; var firstOccur = -1; // 只匹配非空关键字 if (keywords.length > 0) { keywords.forEach(function(keyword, i) { indexTitle = dataTitle.indexOf(keyword); indexContent = dataContent.indexOf(keyword); if (indexTitle < 0 && indexContent < 0) { isMatch = false; } else { if (indexContent < 0) { indexContent = 0; } if (i == 0) { firstOccur = indexContent; } } }); } // 显示搜索结果 if (isMatch) { var resultItem = document.createElement("div"); resultItem.className = "search-result-item"; // 标题 var resultTitle = document.createElement("div"); resultTitle.className = "search-result-title"; var resultLink = document.createElement("a"); resultLink.href = dataUrl; resultLink.textContent = data.title; resultTitle.appendChild(resultLink); resultItem.appendChild(resultTitle); // 内容 if (firstOccur >= 0) { // 截取内容 var content = dataContent; var start = Math.max(0, firstOccur - 20); var end = Math.min(content.length, firstOccur + 80); if (start > 0) { content = '...' + content.substring(start, end) + '...'; } else { content = content.substring(start, end) + '...'; } // 高亮关键字 keywords.forEach(function(keyword) { var regS = new RegExp(keyword, "gi"); content = content.replace(regS, '' + keyword + ''); }); var resultContentDiv = document.createElement("div"); resultContentDiv.className = "search-result-content"; resultContentDiv.innerHTML = content; resultItem.appendChild(resultContentDiv); } resultContent.appendChild(resultItem); } }); } } // 搜索框弹出与关闭 var searchBtn = document.getElementById("nav-search-btn"); var searchPopup = document.querySelector(".local-search-popup"); var closeBtn = document.querySelector(".search-close-button"); if (searchBtn) { searchBtn.addEventListener('click', function(e) { e.preventDefault(); searchPopup.style.display = "block"; input.focus(); }); } if (closeBtn) { closeBtn.addEventListener('click', function() { searchPopup.style.display = "none"; }); } document.addEventListener('keyup', function(e) { if (e.key === "Escape") { searchPopup.style.display = "none"; } }); });