質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
DOM

DOMは、Document Object Modelの略で、HTML文書やXML文書をアプリケーションから利用するためのAPIです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2093閲覧

要素を削除(remove)した後に再び同じセレクタの要素を再取得する方法が分からない。

_akasa

総合スコア5

DOM

DOMは、Document Object Modelの略で、HTML文書やXML文書をアプリケーションから利用するためのAPIです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/07/06 11:17

編集2021/07/06 11:27

前提・実現したいこと

要素を削除した後に再び同じセレクタの要素を再取得する方法が分からないです。もしMutationObserver以外を使う方法があれば教えていただきたいです。

発生している問題・エラーメッセージ

要素を削除した後だとクリックイベントを監視できていない。 つまり要素を消した後にdocument.getElementByClassNameなどで取得できない?

該当のソースコード

js

1let dc=document.getElementsByClassName('ui'); 2dc[0].addEventListener('click',function(){ 3 console.log('click'); 4 // class 'ui'の要素を2番目に追加して合計2つの'ui'の要素 5 dc[0].parentElement.insertAdjacentHTML("beforeend",'<input class="ui" type="submit" value="ok">'); 6 // class 'ui'の要素の1番目を削除 7 dc[0].remove(); 8 })

試したこと

原因の予想はセレクタのついた要素を消すのでdocument.getElementByClassNameがリセットされると考えています。なので再取得をしようとおもってMutationObserverを使ってみましたがダメでした。

let ob=new MutationObserver(function(){ dc=document.getElementsByClassName('ui'); }) let option={ attributes: true, childList: true, characterData: true } ob.observe(dc[0].parentElement,option); let dc=document.getElementsByClassName('ui'); dc[0].addEventListener('click',function(){ console.log('click'); // class 'ui'の要素を2番目に追加して合計2つの'ui'の要素 dc[0].parentElement.insertAdjacentHTML("beforeend",'<input class="ui" type="submit" value="ok">'); // class 'ui'の要素の1番目を削除 dc[0].remove(); })

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

xampp
jquery 3系
chrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/07/06 11:25

なぜ「削除した後に取得する」ことが必要となったのでしょうか?
_akasa

2021/07/06 11:40

要素を出したり消したりするために必要になりました。例えばテキストを編集するとき「編集」ボタンを押し、テキストと編集ボタンを「消して」代わりにキャンセルボタンとテキストフィールドを「出し」キャンセルが押されたらまた最初のテキストと編集するボタンが出るようにするのが目的です。このテキストと編集ボタンの要素とテキストフィールドとキャンセルボタンの要素を出したり消したりしたいです。
guest

回答1

0

ベストアンサー

要素を削除した後だとクリックイベントを監視できていない。

削除した、画面に存在しない要素はイベントを発生させることもありませんし、もちろんクリックすることもできません。

投稿2021/07/06 11:29

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/07/06 11:42

> 要素を出したり消したりしたいです。 エレメントは文字通り削除されていますので、復活させることはできません。「出したり消したりしたい」のであれば、エレメントを削除せず、display: noneで非表示に切り替えるほうが妥当かと思います。
_akasa

2021/07/06 11:45

回答ありがとうございます。 要素を追加してから削除するようにしていて、要素がない状態を作らないようにしてるのですが取得できないのでしょうか。要素を追加した段階で同じクラスを持った要素が2つあり、そのうち一つ消して残りの一つを取得したいと考えています。
maisumakun

2021/07/06 11:51

dc[0].addEventListenerというのは、「そのときdc[0]に入っていたエレメント」に対してイベントをセットするものです(そのエレメントを削除すれば、イベントも起きなくなります)。 後からinsertAdjacentHTMLで追加したエレメントは、イベントと無関係です。
maisumakun

2021/07/06 11:54

> つまり要素を消した後にdocument.getElementByClassNameなどで取得できない? そもそも、元のコードでは、それを「しようともしていない」です。
_akasa

2021/07/06 11:55

そうなんですね。[0]と[1]があって[0]を消したら自動的に残った[1]が[0]に再設定されると思っていました。納得しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問