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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

5420閲覧

【jQuery】動的に生成した要素を変数として扱いたい

obon_t

総合スコア52

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/06/22 15:56

初歩的なご質問で申し訳ないです。

動的に生成した要素に対してvarで変数宣言をして扱いたいのですが、
どのようにすればよいのでしょうか。第二引数にセレクタを記述するやり方はできたのですが、
クリックなどのイベントではなくページを読み込んだときに処理を実行する方法が知りたいです。

$(document).on("click", "#hoge", function(){ //処理 var xxx = $("#hoge"); xxx.addClass("foo"); });

(#hogeは動的に生成された要素です。)

よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

MutationObserver

動的に追加されたノードを捕捉するには MutationObserver を使用します。

DOMNodeInserted

DOMNodeInserted は DOM Level 3 Events では非推奨なイベントとして存在しましたが、後継仕様の UI Events で廃止され、DOM Standard で MutationObserver に置き換えられました。

Re: obon_t さん

投稿2017/06/22 23:05

編集2017/06/22 23:09
think49

総合スコア18162

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

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

obon_t

2017/06/23 08:18

ありがとうございます! MutationObserverを使ってみることにしました。 PS.無事動作いたしました。
sakapun

2017/06/23 18:36

個人が使うプロダクトならば問題ありませんが、最新の仕様を使うと旧ブラウザでは動かない可能性があることを認識した上でお使いください。 例えばこの機能はIEは11以降ではないと動作しません。
think49

2017/06/23 23:31

補足ありがとうございます。 IE10- がMSサポート対象外になったので触れてませんでしたが、仕事ではまだ必要になることがあるかも知れませんね… http://caniuse.com/#feat=mutationobserver。
guest

0

DOMNodeInserted を使って下さい。以下のコードは body 配下にクラス属性が myClass というノードが追加された場合に発火するイベントです。

javascript

1$('body').on('DOMNodeInserted', '.myClass', function(e) { 2 console.log(e.target); 3});

投稿2017/06/22 17:22

mattn

総合スコア5030

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

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

obon_t

2017/06/23 08:14

おお!理想となる動作になりました。 ありがとうございます。 ただ、DOMNodeInsertedはまだ使っても大丈夫なのでしょうか....
mattn

2017/06/23 08:48

非推奨なので使わない方がよさそうですね
guest

0

globalに変数を用意して、そこに入れるんじゃだめなのでしょうか?
他の関数からはグローバルが定義されているか、確認してから使えばよろしいかと。

javascript

1var gElement = null; 2 3$(function() { 4 $('#fuga').on("click", function(){ 5 if (!gElement) { 6 var ele = $("<div>"); 7 ele.addClass("foo"); 8 $('body').append(ele); 9 gElement = ele; 10 } 11 }); 12 $('#hoge').on("click", function(){ 13 if (gElement) { 14 gElement.css('background-color','#FF0000'); 15 } 16 }); 17}); 18```みたいな感じでしょうか?

投稿2017/06/23 01:26

編集2017/06/23 01:27
shi_ue

総合スコア4437

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

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

obon_t

2017/06/23 08:16

ありがとうございます! グローバル変数ですか...その方法を考えていなかったです。試してみます!
guest

0

おそらくやりたいことは下記のコードで実現できるのではと思います。

$(function(){ var xxx = $("#hoge"); xxx.addClass("foo"); })

色々な書き方があるのですが、上の書き方が一番コード量が少なくなるのでお薦めです。
http://qiita.com/8845musign/items/88a8c693c84ba63cea1d

ちなみにJavascriptやjQueryが出てきている場面で「動的に追加される要素」という語句をこのような場面で使うと、意図が伝わらない事がありますのでお気をつけください。
動的に追加される要素とは、ページを読み込み終わった後にさらに$.append()などで追加される要素を指すことが多いためです。
ページを読み込み終わる直後に操作できるものは「動的に追加される要素」とは呼ばないので一応注意してみてください

投稿2017/06/22 16:39

sakapun

総合スコア888

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

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

obon_t

2017/06/22 16:49 編集

説明が下手でごめんなさい。 動的な要素と書かせていただいたのは append()で追加した要素に対するものです。 その追加した要素(#hoge)を変数として扱いたいです。
sakapun

2017/06/22 17:00

追加した要素について、画面を再読込したときに何か反映したいということなのでしょうか? (ちなみにそれは不可能なのですが) それとも追加された瞬間に何かその要素に対して処理を行いたいという意味なのでしょうか?
obon_t

2017/06/22 17:06

まさに後者の意味です。
obon_t

2017/06/22 17:12

動的に生成した要素に対して他の関数からその要素を弄りたいのですが、エラーが出てしまうため悩んでました。それで行き着いたのが上の書き方でしたが、クリックなど必要ないです....。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問