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

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

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

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

Q&A

解決済

2回答

2648閲覧

$(element).each()と $.eachの違い

pegy

総合スコア243

jQuery

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

0グッド

0クリップ

投稿2018/08/24 11:18

  1. $(element).each()
  2. $.each

上記のような2つのコードがあるのですが、1) は複数の要素に対して処理することができる、また2) は配列やオブジェクトにも処理することができるあるのですが、本質的にどのような違いがあるのかがわかりません。

A)例えば$.ajaxもJqueryに対して直接ドット.でつないでいるため、jquery本体のメソッドを利用しているように思えるのですがそのような理解であっているのでしょうか?
つまり、Jqueryオブジェクトまたはそれより上位の参照すべきオブジェクトにはeachメソッドやajaxメソッドが存在しているということであっていますでしょうか?

B) 反対に1)の場合にはDOM要素をJqueryオブジェクトでラッピングした中にeachメソッドがあるので$(element).eachで$(element)にあるeachが利用できているのでしょうか?それとも、結局メソッドチェーンの考え方で1)のケースでも本体JQueryオブジェクトのeachを参照しているのでしょうか?
とすると、冒頭で申し上げた処理に違いが生じるのはおかしいので、$(element)オブジェクトにあるeachメソッドとJqueryオブジェクト本体のeachメソッド別物である気もするのですが。。

どなたかお詳しい方アドバイスをいただけると嬉しいです。
よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

jquery-3.3.1.js

js

1jQuery.fn = jQuery.prototype = { 2 // 中略 3 4 // Execute a callback for every element in the matched set. 5 each: function( callback ) { 6 return jQuery.each( this, callback ); 7 }, 8 9 // 後略

中でjQuery.each呼んでるだけでした。
引数にthisを渡すことで、$(element)に限定したeachを実行していますね。

Jqueryオブジェクト本体のeachメソッド別物である気もするのですが。。

確かに実装上は別物ですが、その実、中ではまったく同じ処理をしているだけです。

冒頭のリンクでjQueryのソースを読むことができます。
全部読んでみるといい勉強になると思いますよ。

投稿2018/08/24 11:30

spookybird

総合スコア1803

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

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

pegy

2018/08/28 13:42

コメントありがとうございます。 JQueryのコードを直接見たことがなかったため、このような視点で学習することがとても勉強になりました。今後に活かしてまいりたいと思います。
guest

0

動作は同じですね、いくつかサンプル

javascript

1<script> 2$(function(){ 3 $('.hoge').each(function(){ 4 console.log($('.hoge').index($(this))+":"+$(this).text()); 5 }); 6 $.each($('.hoge'),function(){ 7 console.log($('.hoge').index($(this))+":"+$(this).text()); 8 }); 9</script> 10<div class="hoge">1</div> 11<div class="hoge">2</div> 12<div class="hoge">3</div> 13

配列やオブジェクトをjQueryで回すには$.eachで指定するしかないですからね

javascript

1 //配列 2 $.each([1,2,3],function(x,y){ 3 console.log(x+":"+y); 4 }); 5 //オブジェクト 6 $.each({"a":1,"b":2,"c":3},function(x,y){ 7 console.log(x+":"+y); 8 });

これが普通の配列を回すforEachだとインデックスとデータが逆になります

javascript

1 [4,5,6].forEach(function(x,y){ 2 console.log(x+":"+y); 3 }); 4 [].forEach.call([4,5,6],function(x,y){ 5 console.log(x+":"+y); 6 }); 7 //forEachではオブジェクトはまわせない 8 [].forEach.call({"a":4,"b":5,"c":6},function(x,y){ 9 console.log(x+":"+y); 10 }); 11

ちなみに、NodeListとHTMLCollectionでも動作が違います

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 /* NodeList */ 4 [].forEach.call(document.querySelectorAll('.hoge'),function(x,y){ 5 console.log(y+":"+x.textContent); 6 }); 7 document.querySelectorAll('.hoge').forEach(function(x,y){ 8 console.log(y+":"+x.textContent); 9 }); 10 /* HTMLCollection */ 11 [].forEach.call(document.getElementsByClassName('hoge'),function(x,y){ 12 console.log(y+":"+x.textContent); 13 }); 14 //以下拾えないかも 15 document.getElementsByClassName('hoge').forEach(function(x,y){ 16 console.log(y+":"+x.textContent); 17 }); 18}); 19</script> 20<div class="hoge">1</div> 21<div class="hoge">2</div> 22<div class="hoge">3</div>

投稿2018/08/24 12:06

yambejp

総合スコア114779

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

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

pegy

2018/08/28 13:45

コメントありがとうございます。 また、遅くなり誠に申し訳ございません。 と申し上げるのも、おっしゃっていたコードを自分でも実行しながら学んでみたのですが、 NodeListとHTMLCollectionの点が全く未知の世界であったため、いろいろな記事を読みながら紐解いていました。正直まだ腹落ちしてにないのですが、経過日数に隔たりができてしまったため、やはり一度案件をクローズしたいと思います。 本件の本質については理解ができたので、改めて感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問