Type Ahead
9521 ワード
DAY 6-Type Ahead
CODE
インプリメンテーション:検索ウィンドウ(inputbox)にテキストを入力し、そのテキストを含むアメリカの都市をリストします.
1)空の配置都市宣言->fetch()関数を使用してエンドポイントからデータを取得し、都市レイアウトにコピーするconst cities = [];
fetch(endpoint)
.then((data) => data.json())
.then((data) => cities.push(...data));
const cities = [];
fetch(endpoint)
.then((data) => data.json())
.then((data) => cities.push(...data));
2)findMatches()関数宣言->filter()メソッドを使用して都市配列をフィルタする
function findMatches(wordToMatch, cities) {
const target = new RegExp(wordToMatch, "gi");
return cities.filter(
(place) => place.city.match(target) || place.state.match(target)
);
}
3)displayMatches()関数宣言->findMatches()関数のthis.value(input value)とcities(都市情報を含むjson)をパラメータとして挿入->入力クエリに一致する都市配列を返しmatchedcities変数に割り当てる
function displayMatches() {
const matchedCities = findMatches(this.value, cities);
}
4)RegExpオブジェクトを作成し、画面にユーザーが入力したテキストを強調表示します.変数inputWordにvalueをgiオプションとして割り当てるfunction displayMatches() {
const matchedCities = findMatches(this.value, cities);
const inputWord = new RegExp(this.value, "gi");
const html = matchedCities
.map((place) => {
const highlightedCity = place.city.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
const highlightedState = place.state.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
})
}
変数html宣言後、matchedCitiesはmap()メソッドとreplace()メソッドを使用して、配列内のinputWordに一致する要素を囲みます.valueで置き換え、highlightedCityという変数に割り当てます.
stateは変数highlightedStateに同じように割り当てられます
function displayMatches() {
const matchedCities = findMatches(this.value, cities);
const inputWord = new RegExp(this.value, "gi");
const html = matchedCities
.map((place) => {
const highlightedCity = place.city.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
const highlightedState = place.state.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
return `
<li>
<span class="name">${highlightedCity}, ${highlightedState}</span>
<span class="population">${place.population}</span>
</li>
`;
})
}
6)join()メソッドを使用して、すべてのliラベル要素join->推奨変数を作成した後.推奨要素の割り当て->推奨.innerHTML=htmlはhtmlをliタグ要素に割り当て、htmlを通じて熊色の結果を提案します.function displayMatches() {
const matchedCities = findMatches(this.value, cities);
const inputWord = new RegExp(this.value, "gi");
const html = matchedCities
.map((place) => {
const highlightedCity = place.city.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
const highlightedState = place.state.replace(inputWord,
`<span class="hl">${this.value}</span>`
);
return `
<li>
<span class="name">${highlightedCity}, ${highlightedState}</span>
<span class="population">${place.population}</span>
</li>
`;
}).join("");
suggestions.innerHTML = html;
}
const searchInput = document.querySelector(".search");
const suggestions = document.querySelector(".suggestions");
searchInput.addEventListener("change", displayMatches);
searchInput.addEventListener("keyup", displayMatches);
Reference
この問題について(Type Ahead), 我々は、より多くの情報をここで見つけました https://velog.io/@carmine/JavaScript-30-Days-Challenge-DAY-6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol