JavaScript 要素を追加/削除する(createElement他)

目次

サンプル 文字を追加する(createElement + createTextNode)
createElement時にclassを追加する
  テキストボックスを追加する(setAttribute("type", "text"))
  リンクを追加する(createElement("a"))
セレクトボックスを追加する(createElement("select"))
ラジオボタンを追加する(type = "radio")
画像を追加する(createElement("img"))
要素を削除する(removeChild)
  複数の要素を削除する

文字を追加する(createElement + createTextNode)

「add」ボタンを押すと文字を追加します。

 

上記サンプルのコードです。

<div id="div1"></div>
<input type="button" value="add" onclick="clickBtn11()" />
<input type="button" value="remove" onclick="clickBtn12()" />

<script>
  function clickBtn11() {
    const div1 = document.getElementById("div1");
    // 要素の追加
    if (!div1.hasChildNodes()) {
      const p1 = document.createElement("p");
      const text1 = document.createTextNode("TEST");
      p1.appendChild(text1);
      div1.appendChild(p1);
    }
  }
  function clickBtn12() {
    // 要素の削除
    const div1 = document.getElementById("div1");
    if (div1.hasChildNodes()) {
      div1.removeChild(div1.firstChild);
    }
  }
</script>

createElementは要素、createTextNodeは文字列を作成します。
以下のように文字列が追加されます。

createElementメソッド

変数 = document.createElement(タグ名);
  • 引数は、タグ名(Pやh2など)を指定します。
  • 戻り値は、新しい要素です。
    →<input type="button" value="ボタン">とある場合、inputが要素です。

    createTextNodeメソッド

    変数 = document.createTextNode(文字);
    • 引数は、文字を指定します。
    • 戻り値はテキストノードです。

    appendChildメソッド

    要素.appendChild(子ノード);
    • 子ノードを追加します。

     

    createElement時にclassを追加する

      function clickBtn1() {
        const div1 = document.getElementById("div1");
        // 要素の追加
        if (!div1.hasChildNodes()) {
          const p1 = document.createElement("p");
          p1.className = "classP1";
          div1.appendChild(p1);
        }
      }

    6行目はclassNameでclassを追加しています。

    以下のようにclassが追加されます。

     

    テキストボックスを追加する(setAttribute("type", "text"))

    「add」ボタンを押すとテキストボックスを追加します。

     

    上記サンプルのコードです。

    <div id="div2"></div>
    <input type="button" value="add" onclick="clickBtn21()" />
    <input type="button" value="remove" onclick="clickBtn22()" />
    
    <script>
      function clickBtn21() {
        const div2 = document.getElementById("div2");
        // 要素の追加
        if (!div2.hasChildNodes()) {
          const input1 = document.createElement("input");
          input1.setAttribute("type", "text");
          input1.setAttribute("maxlength", "10");
          input1.setAttribute("size", "10");
          input1.setAttribute("value", "test123456");
          div2.appendChild(input1);
        }
      }
      function clickBtn22() {
        const div2 = document.getElementById("div2");
        if (div2.hasChildNodes()) {
          div2.removeChild(div2.firstChild);
        }
      }
    </script>
    

    createElementは、要素を作成します。
    setAttributeは、属性を作成します。

    以下のようにテキストボックスが追加されます。

     

    リンクを追加する(createElement("a"))

    「add」ボタンを押すとリンクを追加します。

     

    上記サンプルのコードです。

    <div id="div3"></div>
    <input type="button" value="add" onclick="clickBtn31()" />
    <input type="button" value="remove" onclick="clickBtn32()" />
    
    <script>
      function clickBtn31() {
        const div3 = document.getElementById("div3");
        // 要素の追加
        if (!div3.hasChildNodes()) {
          const a1 = document.createElement("a");
          a1.href = "https://itsakura.com/";
          a1.target = "_blank";
          a1.innerText = "TEST-LINK";
          div3.appendChild(a1);
        }
      }
      function clickBtn32() {
        const div3 = document.getElementById("div3");
        if (div3.hasChildNodes()) {
          div3.removeChild(div3.firstChild);
        }
      }
    </script>
    

    createElementでa要素を作成します。
    以下のようにリンクが追加されます。

     

    セレクトボックスを追加する(createElement("select"))

     

    上記サンプルのコードです。

    <div id="div4"></div>
    <input type="button" value="add" onclick="clickBtn41()" />
    <input type="button" value="remove" onclick="clickBtn42()" />
    
    <script>
      function clickBtn41() {
        const div4 = document.getElementById("div4");
        // 要素の追加
        if (!div4.hasChildNodes()) {
          const select1 = document.createElement("select");
          const opt1 = document.createElement("option");
          opt1.text = "Apple";
          opt1.value = "1";
          const opt2 = document.createElement("option");
          opt2.text = "Banana";
          opt2.value = "2";
          const opt3 = document.createElement("option");
          opt3.text = "Orange";
          opt3.value = "3";
          select1.appendChild(opt1);
          select1.appendChild(opt2);
          select1.appendChild(opt3);
          div4.appendChild(select1);
        }
      }
      function clickBtn42() {
        const div4 = document.getElementById("div4");
        if (div4.hasChildNodes()) {
          div4.removeChild(div4.firstChild);
        }
      }
    </script>
    

     

    ラジオボタンを追加する(type = "radio")

     

    上記サンプルのコードです。

    <div id="div5"></div>
    <input type="button" value="add" onclick="clickBtn51()" />
    <input type="button" value="remove" onclick="clickBtn52()" />
    
    <script>
        function clickBtn51() {
            const div5 = document.getElementById("div5");
            // 要素の追加
            if (!div5.hasChildNodes()) {
                const input1 = document.createElement("input");
                input1.type = "radio";
                input1.name = "fruit";
                input1.id = "r1";
                input1.value = "red";
                const input2 = document.createElement("input");
                input2.type = "radio";
                input2.name = "fruit";
                input2.id = "r2";
                input2.value = "blue";
    
                const text1 = document.createTextNode("red");
                const Label1 = document.createElement("label");
                Label1.htmlFor = input1.id;
                Label1.appendChild(input1);
                Label1.appendChild(text1);
    
                const text2 = document.createTextNode("blue");
                const Label2 = document.createElement("label");
                Label2.htmlFor = input2.id;
                Label2.appendChild(input2);
                Label2.appendChild(text2);
                div5.appendChild(Label1);
                div5.appendChild(Label2);
            }
        }
        function clickBtn52() {
            const div5 = document.getElementById("div5");
            if (div5.hasChildNodes()) {
                for (let i = div5.childNodes.length - 1; i >= 0; i--) {
                    div5.removeChild(div5.childNodes[i]);
                }
            }
        }
    </script>
    

    ラジオボタンの値の表示は、ラベルが必要です。
    以下のようにラジオボタンが追加されます。

     

    画像を追加する(createElement("img"))

    <div id="div1"></div>
    <script>
      const div1 = document.getElementById("div1");
    
      const img1 = document.createElement("img");
      img1.src = "./img/test1.png";
      img1.width = 50;
      img1.height = 50;
      img1.style.cssText = "margin-left:20px";
      div1.appendChild(img1);
    </script>
    

    9行目のようにcssの追加も可能です。

     

    要素を削除する(removeChild)

    <div id="div1">
    	<div id="div2">
    		<p>aaa</a>
    	</div>
    </div>
    <input type="button" value="ボタン" onclick="clickBtn1()">
    <script>
    function clickBtn1(){
    	const div1 = document.getElementById("div1");
    	div1.removeChild(div2);
    }
    </script>

    以下のように指定した要素が削除されます。

    親ノード.removeChild(子ノード);

    removeChildメソッドは、引数の子ノードを削除します。

     

    複数の要素を削除する

    複数の要素はループを使用して削除します。

    <div id="div1">
        <div id="div2">
            <p>テスト1</a>
        </div>
        <div id="div3">
            <p>テスト2</a>
        </div>
    </div>
    <input type="button" value="ボタン" onclick="clickBtn1()" />
    <script>
        function clickBtn1() {
            const div1 = document.getElementById("div1");
            if (div1.hasChildNodes()) {
                for (let i = div1.childNodes.length - 1; i >= 0; i--) {
                    div1.removeChild(div1.childNodes[i]);
                }
            }
        }
    </script>
    

    以下のように指定した要素が削除されます。

    関連の記事

    JavaScript getElementByIdでIDから値を取得
    JavaScript 属性値を取得/設定/削除する(getAttribute)

    △上に戻る