LoginSignup
0
0

More than 3 years have passed since last update.

htmlテーブルのDOM操作の罠

Last updated at Posted at 2020-07-02

罠とは

htmlのテーブルのdom操作について、罠があります。端的に言いますと、テーブルの木構造のことですが、どうも隠れている要素があり、それを無視してしまうと、うまくDOM操作できません。
通常ですと、以下のhtmlコードについて

<!doctype html>
<html>

<head>
    <title>test</title>
</head>

<body>
    <table id="aaaaa">
        <tr>
            <td>test1</td>
            <td>test2</td>
        </tr>
        <tr>
            <td>test3</td>
            <td>test4</td>
        </tr>
    </table>

    <script type="text/javascript">
        var tbody = document.getElementById('aaaaa').childNodes[1];//tbody
        console.log(tbody);

        var children = tbody.childNodes;
        var tr = children[0];
        tbody.removeChild(tr);
    </script>
</body>

</html>

木構造の認識違い

木構造はこのようなものかと思われますが、実は違います。
image.png
実際にはこうです:
image.png
tbodyというのが出てきます。詳しくはhtmlの知識となりますので、ここでは割愛します。
要は上記のhtmlコードで書いてあるように、removeChildをうまいことに正しいDOMオブジェクトをセレクトしないと、エラーが出てきてしまい、子ノードを削除できないのです。


ちなみに、上記コードでは、以下の結果が出てきています。


console.log(document.getElementById("aaaaa").childNodes);
//結果:NodeList(2) [text, tbody]

これはchildNodes[1]を採用した理由です。childNodes[0]を使うと、textノードを選んでしまって、removeChildは到底できなくなりますので、気をつけてください。 
このテキストノードはおそらく改行なのではないでしょうかね。
正確なremoveChild方法はすでに上記コードに記載しました。ご参考まで。

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