DOMおれおれAdvent Calendar 2015 – 06日目
jQueryだと要素を削除するとき $el.remove()
と書けるんだけど、DOMだとこんな書き方になります。
var parent = el.parentNode; parent.removeChild(el);
「目的の要素を親要素から削除する」じゃなくて「目的の要素から子要素を削除する」というAPIになってます。まあこれはこれでありかな。
既に削除済みでドキュメントツリーに所属していない場合、 el.parentNode
は null
になります。(だから一行で el.parentNode.removeChild(el)
と書くとエラーになる。) 汎用的にやるならそこで判定して、親がなければ何もしないようにした方が良いでしょう。
環境
古いIEも含めて一通り使えます。
remove()
もあるにはある
Living Standardの方には書いてあります。IEは未対応、MS Edgeだと対応してるみたい。iOS Safariは未対応だそうです。
おまけ: replaceChild()
あの要素を削除して代わりにこっちの要素を~てな場面では replaceChild(elNew, elTarget)
というのもあります。
var elNew = document.createElement('div'); elNew.appendChild(document.createTextNode('NEW!')); // => <div>NEW!</div> var elTarget = document.body.firstChild; var elParent = document.body; elParent.replaceChild(elNew, elTarget);
地味に大昔のIEからでも使えるみたいです。(エミュレーターの5でも動いた。)