jsコード

検索

document.addEventListener('DOMContentLoaded', function() {
    console.log('DOMContentLoadedイベントが発生しました');

function searchQA() {
    const input = document.getElementById('search-input').value.toLowerCase();
    const resultsDiv = document.getElementById('search-results');
    // 入力チェック
    if (!input) {
        resultsDiv.innerHTML = '';
        const context = document.querySelectorAll('details');
        const instance = new Mark(context);
        instance.unmark();
        return;
    }
    const qaItems = document.querySelectorAll('details');
    let results = '';
    let matchCount = 0;
    qaItems.forEach((details) => {
        const summary = details.querySelector('summary');
        const content = details.querySelector('p');
        if (summary.textContent.toLowerCase().includes(input) || (content && content.textContent.toLowerCase().includes(input))) {
            const qaId = details.id;
            results += `<p><a href="#${qaId}" onclick="openQA('${qaId}', '${input}')">${summary.textContent}</a></p>`;
            matchCount++;
        }
    });
    if (results) {
        resultsDiv.innerHTML = `<p>検索結果:該当${matchCount}件</p>` + results;
    } else {
        resultsDiv.innerHTML = '<p>検索結果:該当なし</p>';
    }
    // 検索実行後にページ最上部へ遷移
    window.scrollTo({ top: 0, behavior: 'smooth' });
    // 既存のマークアップを解除
    const context = document.querySelectorAll('details');
    const instance = new Mark(context);
    instance.unmark();
    // 検索ワードをマークアップ
    instance.mark(input);
}

// 検索結果のリンクから特定のQAを開く
function openQA(qaId, input) {
    const qaElement = document.getElementById(qaId);
    if (qaElement) {
        qaElement.open = true; // アコーディオンを開く
        // 検索ワードをマークアップ
        const context = qaElement;
        const instance = new Mark(context);
        instance.unmark();
        instance.mark(input);
    }
}

// 指定されたカテゴリーまでスクロール
function scrollToCategory(categoryId) {
    const element = document.getElementById(categoryId);
    if (element) {
        element.scrollIntoView({ behavior: 'smooth' });
    }
}

// 先頭に"質問:"を表示させる
document.querySelectorAll('details summary').forEach(summary => {
    summary.textContent = '質問: ' + summary.textContent;
});

// 検索ボックスの入力イベントを監視してリセット処理を追加
document.getElementById('search-input').addEventListener('input', function() {
    const input = this.value;
    if (!input) {
        const resultsDiv = document.getElementById('search-results');
        resultsDiv.innerHTML = '';
        const context = document.querySelectorAll('details');
        const instance = new Mark(context);
        instance.unmark();
    }
});

// サイドバーのカテゴリ表示機能
function toggleSubcategory(index) {
    const subcategory = document.getElementById(`subcategory-${index}`);
    const button = subcategory.previousElementSibling;
    if (subcategory.style.display === "none") {
        subcategory.style.display = "block";
        button.classList.add("open");
    } else {
        subcategory.style.display = "none";
        button.classList.remove("open");
    }
}

window.searchQA = searchQA;
window.openQA = openQA;
window.scrollToCategory = scrollToCategory;
window.toggleSubcategory = toggleSubcategory;
});

いいなと思ったら応援しよう!