ホームページ ウェブフロントエンド jsチュートリアル Jqueryの$(selector).each()と$.each()の違いを詳しく解説

Jqueryの$(selector).each()と$.each()の違いを詳しく解説

Jun 16, 2017 pm 04:20 PM
jquery selector 違い

私たちは皆、Jqurey の each 関数を使用したことがあり、each() を呼び出すには 2 つの方法があることを知っています。1 つは $.each() を介して呼び出すことで、もう 1 つは $(selector).each() を介して呼び出すことです。 )では、それらの違いは何ですか?

Jquery のソース コードを見ると、$.each() がコア実装であり、$(selector).each() が呼び出される $.each() であることがわかります。まず $ のソース コードを分析しましょう。 .each() (下部):

each (obj, callback, args) 関数は 3 つのパラメーターを受け取ります: obj - 走査されるオブジェクトまたは配列、callback - 走査および実行される コールバック関数 、args - 自分で指定した配列 (最初は無視してください)。

jQueryの各メソッドの実装はcallメソッドを使用しています。 まず、次の例では、それぞれの配列の効果は同じです。

通話を通じてこの方向を変更できます。

var testCall = function(obj, callback){
    callback.call(obj, 1);
}
ログイン後にコピー

testCall(["1. this のポインティングを変更します", "2. この関数を内部的に呼び出すことができます"], function(index){ //call メソッドを使用すると、次の最初のパラメータに直接アクセスできますthis を介した呼び出し 渡されるオブジェクト。
alert(this[index]) //2. 関数は、call メソッドを使用して呼び出すことはできず、this は使用されません。

var test = function(obj, callback){
    callback(obj, 1);
}
ログイン後にコピー

test(["1. this のポインティングを変更します", "2. 関数内で this を通じて関数を呼び出すことができます"], function(index){ //call メソッドを使用しないでください。これも使用しません。

alert(this[index ]); //未定義});


jQuery.each は call によって変更された this ポイントである必要があります;

$.each([1,2,3], function (index, item) {    console.log({index:index,value:item,_this:this});
});/*
  Object {index: 0, value: 1, _this: Number}
  Object {index: 1, value: 2, _this: Number}
  Object {index: 2, value: 3, _this: Number}
*/
ログイン後にコピー

jQuery のソースコードを見ていないので、callback.call を使用しましたそれをコピーするには、同じ方法で実装する必要があります。

var each = function(arr, callback){
  for( var index = 0 ; index < arr.length ; index++ ){
    callback.call(arr[index], index, arr[index]);
  }
}
each([1,2,3], function (index, item) {
    console.log({index:index,value:item,_this:this});
});/*
  Object {index: 0, value: 1, _this: Number}
  Object {index: 1, value: 2, _this: Number}
  Object {index: 2, value: 3, _this: Number}
*/
ログイン後にコピー

注: これは、call が使用されていない場合、コールバック関数では使用できません。

1. args がない場合

一般的に、args は一般的に使用されないため、if (args) が確立されている場合、つまりコード内の灰色の部分を直接見る状況については説明しません。 each() 関数のコア部分

if(isArray) {
      for(; i < length; i++) {
        value = callback.call(obj[i], i, obj[i]);
        if(value === false) { break; }
      }
    }
ログイン後にコピー

走査したいオブジェクトが配列型の場合、このコードブロックを入力します

forループ


配列の各要素を走査し、callメソッドを使用して実行しますobj[i].callback( i, obj[i]), したがって、コールバック関数を自分で記述するときは、jquery が配列内の各オブジェクトを使用してコールバック関数を実行することを認識する必要があります。渡されるパラメーターはインデックスです。同時に、コールバック メソッド内の this は要素を指します。次の行は、コールバック関数が値を返すかどうかを決定します。コールバック関数が false を返した場合は、ジャンプします。配列のループの。 渡したオブジェクトもトラバースできる場合、コードは上記の配列トラバーサルと同じです

else {
      for(i in obj) {
          value = callback.call(obj[i], i, obj[i]);
          if(value === false) { break; }
        }
    }
ログイン後にコピー

オブジェクトを渡したら、for(x in y)

を使ってオブジェクトのプロパティをトラバースします

,

原則は上記と同じですが、属性に変更するだけです。

2. args の場合
3 番目のパラメータを指定して each() を呼び出す場合、次のコード ブロックを入力して分析します:

if(isArray) {            
   for(; i < length; i++) {
     value = callback.apply(obj[i], args);                
     if(value === false) { break; }
            }
        } else {            
        for(i in obj) {
          value = callback.apply(obj[i], args);                
          if(value === false) { break; 
          }
        }
  }
ログイン後にコピー

同様に、最初に何をトラバースするかを決定します。オブジェクトが配列であり、配列の場合は、配列要素 obj[i] を走査し、obj[i].callback(args) を実行します

注意!ここで渡されるパラメータは、自分で渡した args 配列です。これは、args パラメータを持たない場合とは異なります。つまり、各関数を呼び出して独自の配列パラメータを渡す場合、コールバック 関数のパラメータ リストは次のようになります。渡した args 配列。他のすべてについても上記と同じです。

$(selector).each(callback,args) 関数は 2 つのパラメーターを受け取ります: callback - トラバースして実行されるコールバック関数、args - 自分で指定した配列。 $.each() 関数を理解した後、$(selector).each は簡単です。ソース コードを開くと、$(selector).each 内で $.each() 関数が呼び出されていることがわかります。

each: function( callback, args ) {
      return jQuery.each( this, callback, args );
  },
ログイン後にコピー

ご覧のとおり、$.each() を呼び出すと、obj パラメーターは $(selector) として記述されます。これは、jquery内部オブジェクトを返す jquery セレクターです。

概要: $.each() と $(selector).each() の違いは、前者はすべてのオブジェクトまたは配列を走査できるのに対し、後者は jquery セレクターによって返される jquery 内部オブジェクトを走査できることです。もっと強くなってください

以上がJqueryの$(selector).each()と$.each()の違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか Mar 19, 2025 pm 04:54 PM

イーサリアムとビットコインの違いは重要です。技術的には、BitcoinはPowを使用し、EtherはPowからPOSに移行しました。ビットコインの取引速度は遅く、イーサリアムは高速です。アプリケーションシナリオでは、Bitcoinは支払いストレージに焦点を当て、EtherはスマートコントラクトとDAPPをサポートしています。発行に関しては、ビットコインの総量は2100万人であり、エーテルコインの総額は固定されていません。各セキュリティチャレンジが利用可能です。市場価値に関しては、ビットコインが最初にランク付けされ、両方の価格の変動は大きいですが、特性が異なるため、イーサリアムの価格動向はユニークです。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

Bean BreadとDeepseekの違いは何ですか Bean BreadとDeepseekの違いは何ですか Mar 12, 2025 pm 01:24 PM

Bean BunとDeepseekのコアの違いは、検索の精度と複雑さです。 1. Doubaoは、シンプルで直接的なキーワードのマッチングに基づいていますが、低コストですが、精度が低く、構造化されたデータにのみ適しています。深い学習に基づいています。最終的な選択は、アプリケーションのシナリオとリソースの制限に依存します。

Ouyi Okexの開幕時間と閉鎖時間の詳細な紹介 Ouyi Okexの開幕時間と閉鎖時間の詳細な紹介 Mar 18, 2025 pm 01:06 PM

OUYI OKEXデジタル資産取引プラットフォームは、従来の証券市場とは異なり、ユーザーはいつでもFIAT通貨取引、通貨取引、契約取引を行うことができます。 ただし、プラットフォームは、システムメンテナンスのアップグレードや特別な市場イベント(深刻な市場の変動を引き起こす極端な市場条件など)の場合、取引の停止や契約取引の開始規則の変更など、取引時間またはルールを事前に発表し、一時的に調整します。したがって、ユーザーはプラットフォームの発表と市場動向に細心の注意を払い、取引の機会をつかみ、リスク管理において良い仕事をすることをお勧めします。 OUYI OKEXの取引時間とルールの調整を理解することによってのみ、デジタル通貨市場で簡単にすることができます。

ApacheまたはnginxはPHPと一緒にどのように連携しますか:mod_php5、php-cgi、およびphp-fpmの違いは何ですか? ApacheまたはnginxはPHPと一緒にどのように連携しますか:mod_php5、php-cgi、およびphp-fpmの違いは何ですか? Apr 01, 2025 pm 12:15 PM

ApacheまたはNginxとPHPの間の共同作業メカニズム:mod_php5、php-cgi、およびphp-fpmの比較は、ApacheまたはNginxを使用してWebサーバーを構築し、バックエンドにPHPを使用することです。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

See all articles