22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

生のjavascriptで親要素は削除するけど子要素は残す(jQueryのunwrapっぽく)

Last updated at Posted at 2018-01-06

あるdivがあって、子要素は残しつつそのdivだけを削除したいというとき、生のjavascriptでどうやるのか意外と情報が見当たらなかったのでメモします。 jQueryのunwrap と同じことを生のjavascriptでやろうという目的です。

準備

前提としてこういうHTMLがあるとして、ボタンをクリックすると div タグは消すけど p タグは残すという処理を、 jQuery の場合と生の javascript の場合とで実装してみます。

<!-- jQueryの実験用 -->
<button id="button1">ボタン</button>
<div id="parent1">
  <p>child</p>
</div>

<!-- 生のjavascriptの実験用 -->
<button id="button2">ボタン</button>
<div id="parent2">
  <p>child</p>
</div>

上述のとおり jQuery には unwrap という便利なものがあるのですが、生の javascript にはそういうのはなさそうでしたので、これで代替できそうというのを以下でやってみました。 ES6 で書いています。

jQuery の unwrap() を使う場合

jQuery の場合
// jQuery で用意されている unwrap() を使う
$('#button1').click(() => $('#parent1 p').unwrap());

生の javascript でやるとこんな感じ。

生の javascript で再現
/**
 * 指定したDOMは削除し、子要素を取り出して描画する関数。
 * jQuery の unwrap と同等の処理をおこないます。
 *
 * @param {HTMLElement} target 対象のDOMオブジェクト
 */
const unwrap = target => {
  while(target.firstChild) {
    target.parentNode.insertBefore(target.firstChild, target);
  }
  target.remove();
};

//使用例: ボタンをクリックしたらunwrapを実行します。
document.querySelector('#button2').onclick = () =>
  unwrap(document.querySelector('#parent2'));

jsfiddleにサンプル置きましたのでご参考ください。

(19/05/02: 文体等を調整しました。)

22
14
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
22
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?