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?

TypeScript:6.appendChild

Posted at

DOM操作をするときの基本appendChild

qiita.rb
private updateSelectedList(): void{
    const selectedItems = this.foodItems.filter(item => item.selected);
    const ul = document .querySelector('.selected-foods') as HTMLUListElement;

    ul.innerHTML = ''; 

    selectedItems.forEach(item => {
        const nameEl = item.element.querySelector('.food__name') as HTMLDivElement;
        const li document.createElement('li');
        li.textContent = nameEl.textContent;
        ul.appendChild(li);
    });
}

上記のコードは選択された食べ物が

    に1個ずつ表示される

    詳しく解説

    ⓪const nameEl = item.element.querySelector('.food__name') as HTMLDivElement;
    item要素にあるfoodnameクラスを取得して格納する

    ①const li = document.createElement('li');
    HTMLの<li>要素をJavaScriptで作ってる

    ②li.textContent = nameEl.textContent;
    <li>要素のtextContentに'foodname'クラスのtextContentを代入

    ③ul.appendChild(li);
    作った<li><ul>に追加している

    アイテムネームを文字列結合してそれをulのtextContentに代入すればいいとおもっていたけどやっぱり一個ずつli要素を作ってappendChildするやり方がいいの?

    回答
    質問の「文字列結合でtextContentに代入」も動くは動く、、、
    「リストとしての見た目・柔軟性・保守性」を考えると、<li>を1つずつ作ってappedChildする方がおすすめ

    textContentに文字列を結合して代入した場合
    ・ulタグの意味がなくなる
    ・自動的に改行されない
    ・CSSで1つずつスタイリングできない
    ・削除や追加など、個別操作ができない

    1つずつliを作ってappendChildした場合
    ・HTMLとして正しい構造
    ・見た目がリストして整う
    ・CSSでリスト項目ごとに装飾が可能
    ・削除やクリックイベントをli単位で制御可能
    ・拡張しやすい

    実務やアプリ開発では
    ・項目の右側に「削除」ボタンをつける
    ・アイテムにクラスをつけて色を変える
    ・順番を入れ替える
    このような機能はtextContent方式では実現が難しく1つずつ要素を作る胞子が圧倒的に強い。

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?