4
5

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 3 years have passed since last update.

jQueryでイベントハンドラも含めてDOMを複製する

Last updated at Posted at 2019-07-11

jQueryをバンバン使用している案件において、
clickイベント登録されたボタンを別の場所にも配置したい
でもCMS改修はしたくないから、フロントで何とかしてほしい
という要件でちょっとググったら出てきました。

今の今まで存在を知らなかっただけですが、自分用のメモとして…

clone(true)を使う

clone()はある要素のコピーを作成してDOMの他の場所に配置する関数です。
jQuery("#A").clone().insertBefore("#B")のように使います。

clone(true)とtrueをセットすることでイベントハンドラも含めてDOMをコピーできます。

jQuery("#clone-sitai-el").clone(true).insertBefore("#kono-el-no-ueni-insert");

おまけ:jQueryを使用しない場合

結論から言うとイベント含めたDOM複製はバニラJSでは不可です。
cloneNode(true)clone()と同等の複製はできますが、on()addEventListener()で登録したイベントは引き継がれないです。
(HTMLのonclick属性は引き継げます)
ちなみにcloneNode(false)にすると対象ノードだけ複製してきて子要素は無視します。




とりあえず、この分野に関してはまだjQueryに軍配が上がるようで・・・
長いページにおいて、ライブラリを使って簡単に実装したモーダル表示ボタンとかをいろんば場所に置いておきたい、等の場面で便利だなぁ

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?