0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ぷよクエをたのしく!アプリをつくってみよう!(キャラ図鑑UI:キャラ名検索2)

0
Last updated at Posted at 2026-04-27

キャラ名の部分一致検索による候補表示

一致検索ではキャラの亜種(似たようなキャラ名)を検索できないので不便に感じた。
あと、シリーズ内キャラがいったい何個あるのか調べるにも便利かもと。

■UIイメージ
image.png
処理シチュエーションはこんな感じ。
・キャラ名を入力する
・入力内容を含むキャラ名を部分一致検索する
・検索結果をコンボボックスへ入れる
・コンボボックスからキャラを選択して該当のキャラへスクロールする

前回の実装に以下を追加変更する。

実装 処理概要
変更 入力内容を含むキャラ名を部分一致検索する
追加 検索結果をコンボボックスへ入れる
追加 コンボボックスからキャラを選択、該当のキャラへスクロールする

前回の内容は以下を参照してください。
https://qiita.com/puyon/items/74c85d59e63b40572ed7

キャラ名の部分一致検索

部分一致検索は前回の通り。
タグに「title」属性をつけている前提でこんな感じ。

const targets = document.querySelectorAll(`${itemCss} div[title*="${keyword}"]`)

要するに検索結果がtargetsに入ってくるので、これをコンボボックスに入れるといいみたい。

検索結果をコンボボックスへ入れる

コンボボックスを作るのは「select」タグと「option」タグを使うらしい。
それぞれ役割分担しているとのこと。

タグ 役割
select コンボボックスの外側
option コンボボックスの選択肢

コンボボックスの選択肢を作成

「targets」を元にHTMLを作るのはこんな感じ。

let index = -1
let optionHtmls = ``
for (const t of targets) {
    const elem = t as HTMLElement

    index++
    const value = elem.title.trim()
    const title = value

    const selected = index === 0 ? " selected" : ""
    const optionHtml = `
<option value="${value}"${selected}>${title}</option>
`.trim()
    optionHtmls += optionHtml
}

コンボボックスの外側を作成

HTMLが作れたので、「select」タグのインスタンスを作成する。

const select = document.createElement("select")
const comboName = "char-search-combo"
select.id = comboName
select.className = comboName
select.innerHTML = optionHtmls

キャラ名を選択したときの動作を入れる

キャラ名を選択したことを通知してもらうには、イベントリスナーを作成するらしい。

select.addEventListener("change", (ev) => {})

キャラを選択したら「ev」に選択結果が通知される。

select.addEventListener("change", (ev) => {
    const target = ev.target as HTMLSelectElement
    const keyword = target.value  //選択したキャラ名

    //keywordを使って一致検索する
})

次回は。

図鑑アプリとしては、とりあえず機能するようになった。
ただ、ちょっとした不満がでてきた。
・表示位置が同じ。移動したいな。
・ブラウザ内に、キャラ選択UI以外のUIを表示したい。

つづく。
https://qiita.com/puyon/items/8e5da09b204f9f165692

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?