検索
ホームページウェブフロントエンドjsチュートリアルjQuery_jquery の .bind()、.live()、および .delegate() の違いの分析

DOM ツリー

まず、HMTL ドキュメントの DOM ツリーを視覚化すると役立ちます。単純な HTML ページは次のようになります:
jQuery_jquery の .bind()、.live()、および .delegate() の違いの分析
イベントバブリング (イベント伝播とも呼ばれます)
リンクをクリックすると、リンク要素のクリック イベントがトリガーされ、その要素のクリック イベントにバインドされた関数の実行がトリガーされます。
コードをコピー コードは次のとおりです。

$('a').bind( 'クリック' ,function(){alert('くすぐったい!')})

クリック操作によりアラート機能の実行がトリガーされます。
jQuery_jquery の .bind()、.live()、および .delegate() の違いの分析
クリック イベントはツリーのルートに向かって伝播し、親要素にブロードキャストされ、次に子孫要素の 1 つでクリック イベントがトリガーされる限り、イベントは に渡されます。それ。
jQuery_jquery の .bind()、.live()、および .delegate() の違いの分析
DOM の操作のコンテキストでは、ドキュメントはルート ノードです。
これで、.bind()、.live()、.delegate() の違いをより簡単に説明できるようになりました。
.bind()
コードをコピー コードは次のとおりです:
$('a' ).bind ('click',function(){alert('くすぐったい!');})

これは最も単純なバインド方法です。 JQuery はドキュメントをスキャンしてすべての $('a') 要素を検索し、アラート関数を各要素のクリック イベントにバインドします。
.live()
コードをコピー コードは次のとおりです:
$('a' ).live ('click',function(){alert('That niceles!')})

JQuery は、alert 関数を $(document) 要素にバインドし、'click' と 'a' を次のように使用します。パラメータ 。イベントがドキュメント ノードに到達するたびに、イベントがクリック イベントであるかどうかがチェックされ、イベントのターゲット要素が 'a' CSS セレクターと一致するかどうかがチェックされ、一致する場合は関数が実行されます。
ライブ メソッドは、次のようにドキュメントの代わりに特定の要素 (または「コンテキスト」) にバインドすることもできます。
コードをコピー コードは次のとおりです:
$('a',$('#container')[0]).live('click',function(){alert('くすぐったい! ')} )

.delegate()
コードをコピー コードは次のとおりです:
$('#container').delegate('a','click',function(){alert('くすぐったい!')})


JQuery はドキュメントをスキャンして $ を見つけます('#container')、クリック イベントと 'a' CSS セレクターをパラメーターとして使用して、アラート関数を $('#container') にバインドします。イベントが $('#container') までバブルするたびに、イベントがクリック イベントであるかどうか、およびイベントのターゲット要素が CSS セレクターと一致するかどうかがチェックされます。両方のチェックの結果が true の場合、関数が実行されます。
このプロセスは .live() に似ていますが、ハンドラーをドキュメントではなく特定の要素にバインドすることに注意してください。精通した JS なら、 $('a').live() == $(document).delegate('a') と結論付けるかもしれませんね。
.delegate() が .live() よりも優れている理由
いくつかの理由により、人々は通常、ライブ メソッドの代わりに jQuery のデリゲート メソッドを使用することを好みます。次の例を考えてみましょう:
コードをコピー コードは次のとおりです:
$('a')。 live(' click', function() { blah() });
または
$(document).delegate('a', 'click', function() { blah() });
後者はスキャンする必要があるため、実際には前者よりも高速です。全体 ドキュメントはすべての $('a') 要素を検索し、それらを jQuery オブジェクトとして保存します。 live 関数は、後の判断のために文字列パラメーターとして 'a' を渡すだけで済みますが、$() 関数は、リンクされたメソッドが .live() になることを「認識」しません。

一方、デリゲート メソッドは $(document) 要素を検索して保存するだけで済みます。
この問題を回避する 1 つの方法は、$(document).ready() の外側でライブ バインドを呼び出して、すぐに実行されるようにすることです。この方法では、DOM が設定される前に実行されるため、要素が検出されたり、jQuery オブジェクトが作成されたりすることはありません。
柔軟性とチェーン機能
ライブ機能も非常にわかりにくいです。考えてみてください。これは $('a') オブジェクトのセットにリンクされていますが、実際には $(document) オブジェクトに対して動作します。このため、恐ろしい方法でメソッドを自分自身に連鎖させようとする可能性があります。実際、私が言いたいのは、live メソッドは $.live('a',...) の形式のグローバル jQuery メソッドとしてより意味があるということです。
CSS セレクターのみをサポートします
最後に、ライブ メソッドには非常に大きな欠点があります。つまり、直接 CSS セレクターでしか動作できないため、柔軟性が非常に低くなります。
CSS セレクターの欠点について詳しくは、「jQuery .live() および .die() の探索」の記事を参照してください。
更新: この次のセクションを含めるように思い出させてくれた Hacker News の Pedalpete と以下のコメントの Ellsass に感謝します。
.bind() の代わりに .live() または .delegate() を選択する理由
結局のところ、bind の方が明確で直接的だと思いませんか? さて、bind の代わりに delegate または live を選択する理由は 2 つあります。
1. DOM にまだ存在しない DOM 要素にハンドラーをアタッチします。バインドはハンドラーを個々の要素に直接バインドするため、ページ上にまだ存在しない要素にハンドラーをバインドすることはできません。
2. $('a').bind(…) を実行し、AJAX 経由でページに新しいリンクが追加された場合、バインド ハンドラーはこれらの新しく追加されたリンクに対して無効になります。一方、Live と delegate は別の祖先ノードにバインドされているため、その祖先要素内に現在存在する、または今後存在するすべての要素に対して有効です。
3. または、単一の要素または要素の小さなグループにハンドラーをアタッチするには、ループして同じ関数を DOM 内の 100 個の要素に 1 つずつアタッチする代わりに、子孫要素のイベントをリッスンします。ページ内のすべての要素にハンドラーを直接アタッチするよりも、ハンドラーを 1 つ (または少数の) 祖先要素にアタッチするとパフォーマンス上の利点があります。
拡散をやめてください
最後に注意したいのは、イベントの伝播に関するものです。通常、次のようなイベント メソッドを使用してハンドラー関数の実行を終了できます。
コードをコピー コードは次のとおりです。 :

$('a').bind('click',function(e){
e.preventDefault()
e.stopPropagation()}
)

ただし、ライブ メソッドまたはデリゲート メソッドを使用する場合、ハンドラー関数は実際には実行されておらず、ハンドラーが実際にバインドされている要素にイベントがバブルされるまで待機する必要があります。この時点で、.bind() の他のハンドラー関数はすでに実行されています。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP Fatal error: Call to undefined function ldap_bind()的解决方法PHP Fatal error: Call to undefined function ldap_bind()的解决方法Jun 22, 2023 pm 11:37 PM

在使用PHP开发Web应用程序时,我们经常需要使用LDAP身份验证来保护应用程序的访问。然而,在有些情况下,当我们尝试使用PHP的LDAP功能来实现身份验证时,可能会遇到以下错误消息:"PHPFatalerror:Calltoundefinedfunctionldap_bind()"。这种错误消息通常会在应用程序调用ldap_bind()函数

linux bind是什么linux bind是什么Mar 25, 2023 am 09:39 AM

linux bind是一个用于显示或设置键盘按键与其相关功能的命令,可以利用bind命令了解有哪些按键组合与其功能,也可以自行指定要用哪些按键组合;其使用语法是“bind [-dlv][-f <...>][-m <...>][-q <...>]”。

如何修复0x87dd0019 Xbox登录错误如何修复0x87dd0019 Xbox登录错误Mar 22, 2024 pm 02:30 PM

本文将指导您修复0x87dd0019Xbox登录错误,该错误会在您尝试连接到XboxLive或登录XboxOne时出现连接超时问题。Xbox上的错误代码0x87e00019是什么?在Xbox主机上安装或更新游戏时,如果你遇到错误代码0x87e00019,这表示你的Xbox硬盘驱动器可能已经存储空间不足或接近满。为了解决这个问题,你需要释放一些存储空间。同时,还应该检查XboxLive服务的状态,因为这个错误可能是由于Xbox服务器问题导致的。如何修复0x87dd0019Xbox登录错误使用这些建

win10无法登录xbox live怎么办?win10无法登录xbox live解决方法win10无法登录xbox live怎么办?win10无法登录xbox live解决方法Feb 15, 2024 am 11:51 AM

xbox是微软自带的网络服务中心,不少的用户们在玩耍的时候发现自己的win10电脑无法登录xboxlive,那么这要怎么办?下面就让本站来为用户们来仔细的介绍一下win10无法登录xboxlive解决方法吧。win10无法登录xboxlive解决方法1、“win+R”快捷键开启运行窗口,输入“services.msc”,回车打开。2、进入“服务”窗口界面后,找到右侧中的“xboxlive身份验证管理器”双击打开

下载Xbox内容时出现错误0x87e107d1下载Xbox内容时出现错误0x87e107d1Feb 22, 2024 am 09:50 AM

当您在控制台上下载Xbox内容时遇到错误代码0x87e107d1时,可能需要一些步骤来解决此问题。通常,此错误会出现在用户试图下载内容到Xbox游戏机时。接下来,我们将探讨一些方法来修复这个问题,确保您能顺利下载所需的内容。修复下载Xbox内容时出现的错误0x87e107d1如果下载Xbox内容时出现错误0x87e107d1,请使用以下修复程序来解决该问题。检查XboxLive服务状态检查您的互联网连接关闭再打开您的Xbox游戏机尝试重新下载内容删除和添加您的个人资料我们开始吧。1]检查Xbox

JS中的bind的实现以及使用JS中的bind的实现以及使用Feb 24, 2024 pm 01:33 PM

JS中的bind的实现以及使用在JavaScript中,bind是一个非常有用的函数方法。它可以创建一个新的函数,同时确保这个函数在调用时,具有特定的this值,并且可以传递指定的参数。bind方法的定义如下:functionbind(fn,obj,...args){returnfunction(...args2){return

Xbox Party Chat音频中断或无法工作[修复]Xbox Party Chat音频中断或无法工作[修复]Feb 19, 2024 am 11:18 AM

如果你在使用XboxParty时遇到聊天音频被切断或无法工作的问题,可能是由于互联网连接不稳定或XboxLive服务出现故障等原因造成的。本文将帮助你解决这些问题,确保你能顺利进行XboxParty游戏聊天。修复Xbox聚会聊天音频切断或不工作使用以下修复程序修复XboxPartyChat音频中断或无法工作的问题:检查XboxLive服务状态检查您的互联网连接关闭后再打开Xbox游戏机检查您的NAT类型离开并重新加入党出厂重置您的Xbox主机我们开始吧。1]检查XboxLive服务状态在继续排查

Does premiere mean live?Does premiere mean live?Apr 04, 2025 am 12:07 AM

"Premiere"和"live"在视频制作中的含义不同:"premiere"指首次发布或首映,而"live"指实时直播。1."Premiere"是预先录制内容的首次展示。2.在AdobePremierePro中设置首映涉及剪辑、编辑和渲染,然后安排首映时间。3.使用Python脚本可以调度视频首映。4.关键步骤包括导出设置、时间同步和预览测试。5.挑战包括性能问题、时间管理和平台兼容性。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!