【JavaScript】検索欄に入力した文字列にマッチした項目を表示
 2023年10月23日
 WEBサイト制作
- #HTML
 - #css
 - #JavaScript
 - #tips
 
こんにちは!
 上毛印刷WEB制作担当のソーヤです。
 
今回はデータベースを構築せずに検索機能を実装する方法をご紹介します。
 このような検索して結果が出るようなものってデータベースを構築して、組んでくイメージですが、そこまでする必要がない場合にこのような実装が役立ちます。
実装例
- ・ネクストヒューマン株式会社
 - ・桐生印刷株式会社
 - ・ビヨンドソフトウェア
 - ・上毛書店
 - ・テレビ夕焼け株式会社
 - ・モノリス書店
 - ・株式会社ヒューマンスレイブ
 - ・イディオットトライブ株式会社
 
 試しに「書店」「株式会社」「ネクスト」「テレビ」などのワードを検索欄に入れて検索ボタンを押してください。
 そうしたら、該当する項目が表示されるはずです。
 結果がない場合は「NO DATA」と表示されます。
HTML例
<div class="search">
    <input type="search" id="search-text" name="search" class="searchform" placeholder="入力してください">
    <button id="searchBtn">検索</button>
</div>
<div class="search-area">
    <div class="search-result">
        <div class="search-result__hit-num"></div>
        <div id="search-result__list"></div>
    </div>
</div>
<ul id="targeArea">
    <li class="targeItem">・ネクストヒューマン株式会社</li>
    <li class="targeItem">・桐生印刷株式会社</li>
    <li class="targeItem">・ビヨンドソフトウェア</li>
    <li class="targeItem">・上毛書店</li>
    <li class="targeItem">・テレビ夕焼け株式会社</li>
    <li class="targeItem">・モノリス書店</li>
    <li class="targeItem">・株式会社ヒューマンスレイブ</li>
    <li class="targeItem">・イディオットトライブ株式会社</li>
</ul>CSS例
#targeArea{
    display: none;
}
#search-result__list span{
    display: block;
}JavaScript例
document.addEventListener('DOMContentLoaded', function() {
    document.addEventListener('click', function(event) {
        if (event.target.id === 'searchBtn') {
            let searchResult = [];
            let searchText = document.querySelector('#search-text').value;
            let targetText;
            let searchResultList = document.querySelector('#search-result__list');
            searchResultList.innerHTML = '';
            let noDataElement = document.querySelector('.noData');
            if (noDataElement) {
                noDataElement.remove();
            }
            let targetAreaItems = document.querySelectorAll('.targeItem');
            let resultNumber = 0;
            if (searchText !== '') {
                targetAreaItems.forEach(function(item) {
                    targetText = item.textContent;
                    if (targetText.indexOf(searchText) !== -1) {
                        searchResult.push(targetText);
                    }
                });
                for (let i = 0; i < searchResult.length; i++) {
                    let spanElement = document.createElement('span');
                    spanElement.textContent = searchResult[i];
                    searchResultList.appendChild(spanElement);
                    resultNumber = searchResultList.querySelectorAll('span').length;
                }
            }
            if (resultNumber === 0) {
                let noDataSpan = document.createElement('span');
                noDataSpan.className = 'noData';
                noDataSpan.textContent = 'NO DATA';
                document.querySelector('.search-result').appendChild(noDataSpan);
            }
        }
    });
});まとめ
今回もjQueryではなく、Vanilla.jsで実装してみました。
コピペしてガンガン使ってください!
この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。