レッスンに戻る

要素のクリア

重要度: 5

要素からすべてを削除する関数 clear(elem) を作成してください。

<ol id="elem">
  <li>Hello</li>
  <li>World</li>
</ol>

<script>
  function clear(elem) { /* your code */ }

  clear(elem); // clears the list
</script>

最初に、どのようにしないかを見てみましょう

function clear(elem) {
  for (let i=0; i < elem.childNodes.length; i++) {
      elem.childNodes[i].remove();
  }
}

これは機能しません。remove() を呼び出すと elem.childNodes コレクションがシフトするため、要素は常にインデックス 0 から始まります。しかし、i は増え続け、いくつかの要素はスキップされます。

for..of ループでも同じことが起こります。

正しいバリアントは次のとおりです

function clear(elem) {
  while (elem.firstChild) {
    elem.firstChild.remove();
  }
}

また、同じことを行うより簡単な方法もあります

function clear(elem) {
  elem.innerHTML = '';
}