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

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

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

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

Q&A

解決済

1回答

1110閲覧

MutationObserver:動的に追加した要素に対して処理できない

erp

総合スコア46

JavaScript

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

0グッド

0クリップ

投稿2021/10/30 04:35

前提・実現したいこと

動的にPHPで出力した要素にMutationObserverを使ってオートリンクしたいです。

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

エラーはないのですが、オートリンクされません。
以下コード

該当のソースコード

js

1const target = document.querySelector('.room'); 2 const observer = new MutationObserver(function () { 3 let room = document.querySelector('.room'); 4 let exp = /(\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gi; 5 room.innerHTML = room.innerHTML.replace(exp, "<a target=\"_blank\" class=\"icon-lnr icon-exit\" href='$1'>$1</a>"); 6 }); 7 const config = { 8 attributes: true, 9 childList: true, 10 characterData: true 11 }; 12 observer.observe(target, config);

html

1<div class="room"> 2 <div> 3 <!-- 動的に追加された内容 --> 4 <p>https://twitter.com/xxx/</p> 5 <!-- ここまで --> 6 </div> 7</div>

試したこと

MutationObserverについての記事を沢山読み、それぞれの書き方で試しましたが、上手くいきません。また、target がquerySelectorAll の場合はどうすればよいでしょうか。

エラーがないので何が間違っているのか全く分からず困っています。どうかご助力ください。

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

Firefox 最新版

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

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

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

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

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

guest

回答1

0

自己解決

js

1tttt = document.querySelector('.room'); 2 options02 = { 3 childList: true, 4 characterData: true, 5 characterDataOldValue: true, 6 attributes: true, 7 subtree: true, 8 } 9 function call02(mutationsList, observer) { 10 for (const mutation of mutationsList) { 11 tar = mutation.target // target 12 add = mutation.addedNodes // add DOM 13 remove = mutation.removedNodes // delate DOM 14 let exp = /(\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gi; 15 tar.innerHTML = tar.innerHTML.replace(exp, "<a target=\"_blank\" class=\"icon-lnr icon-exit\" href='$1'>$1</a>"); 16 } 17 obs02.disconnect(); 18 } 19 obs02 = new MutationObserver(call02); 20 obs02.observe(tttt, options02);

とりあえずはこちらで出来ました。
Allで取ってきた要素に対しての処理はまた別に考えます。

投稿2021/10/30 05:47

編集2021/10/30 12:51
erp

総合スコア46

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問