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

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

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

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

jQuery

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

Q&A

1回答

315閲覧

jQuery thisが指し示すもの

shinoru

総合スコア6

JavaScript

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

jQuery

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

1グッド

1クリップ

投稿2022/09/15 05:01

編集2022/09/15 05:06

実現したいこと

最近teratailを知り、記載させていただいています。
jqueryのeachにアロー関数を使いたいと思っています。
実装しようとしているのは単純なアコーディオンです。
まずは複数の要素に対して処理を行う前段階を確立させるゴールを目指します。(クリックしてからの動作などは一旦なしです)

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

アロー関数を使用すると、コンソールでdtの数を調べると「6」
アロー関数未使用だと、コンソールでdtの数を調べると「3」
と表示されます。
各dl.accordion の中に含まれているdtの数を表示したいので「3」と表示されるゴールを目指していますが、アロー関数を使用するとdocmuent要素からdtを探して、dtの合計数の「6」が表示されてしまいます。
アロー関数時のthisはdocumentを必ず参考してしまうのでしょうか?
アロー関数を使用し、アロー関数なしのような「3」となるゴールを目指したいです。

//■html <dl class="accordion"> <dt>Item 1</dt> <dd>Item 1contents</dd> <dt>Item 2</dt> <dd>Item 2contents<</dd> <dt>Item 3</dt> <dd>Item 1content3<</dd> </dl> <br><br> <dl class="accordion"> <dt>Item 1</dt> <dd>Item 1contents</dd> <dt>Item 2</dt> <dd>Item 2contents<</dd> <dt>Item 3</dt> <dd>Item 1content3<</dd> </dl> //アロー関数を使用 $(function () { $('.accordion').each(() => { console.log($(this));//document console.log(this); const dt = $(this).find('dt'); console.log('アロー:' + dt.length);//コンソール結果 アロー:6 が2回表示 }); }); //アロー関数を使わない $(function () { $('.accordion').each(function(){ console.log($(this)); const dt = $(this).find('dt'); console.log('ノーアロー:' + dt.length);//コンソール結果 ノーアロー:3 vが2回表示 }); }); //暫定 //アロー関数を使用 改良版 $(function () { $('.accordion').each((i, ele) => { const dt = $(ele).find('dt'); console.log(i); console.log(ele); console.log(dt.length); }); });
int32_t👍を押しています

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

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

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

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

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

yambejp

2022/09/15 06:56

jQueryを使う限りアロー関数は使わないでください。
guest

回答1

0

その用途で this を使いたいならアロー関数は使えません。「どのように呼んでも this は定義時のものと同一になる」がアロー関数の特徴ですから、呼ばれるたびに this が違うものを指すという each() の仕様にはまったくもって合いません。

アロー関数を使うなら、$('.accordion').each((index, element) => { のようにして this のかわりに element を使う必要があります。

投稿2022/09/15 05:06

編集2022/09/15 05:26
int32_t

総合スコア20856

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

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

shinoru

2022/09/15 05:26

ありがとうございます。 暫定で考えたソースがその形なのでやはりこうやって使うのがよさそうですね。 //暫定 //アロー関数を使用 改良版 $(function () { $('.accordion').each((i, ele) => { const dt = $(ele).find('dt'); console.log(i); console.log(ele); console.log(dt.length); }); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問