112

私はjQueryの初心者で、いくつかのコード例を調べているときに見つけました:

$(document.body)$('body')

これら2つに違いはありますか?

4

7 に答える 7

82

これらは同じ要素を参照しますが、違いはdocument.body、要素を直接 jQuery に渡すと言う場合です。または、string を渡す'body'と、jQuery セレクター エンジンは文字列を解釈して、それが参照している要素を特定する必要があります。

実際には、どちらも仕事を成し遂げます。

興味のある方は、 jQuery 関数のドキュメントに詳しい情報があります。

于 2012-09-06T19:36:45.180 に答える
18

ここでの答えは実際には完全に正しいわけではありません。閉じますが、エッジケースがあります。

違いは、$('body') は実際にはタグ名で要素を選択するのに対し、document.body はドキュメントの直接のオブジェクトを参照することです。

つまり、あなた (または不正なスクリプト) が document.body 要素を上書きした場合 (残念!) $('body') は機能しますが、$(document.body) は機能しません。したがって、定義上、それらは同等ではありません。

他のエッジ ケース (IE のグローバルに ID 化された要素など) があり、ドキュメント オブジェクトの上書きされた body 要素に相当するものをトリガーし、同じ状況が適用されると思います。

于 2016-02-03T16:19:49.003 に答える
9

$(document.body)はグローバル参照を使用してdocumentへの参照を取得しますが、body$('body')jQuery が の<body>要素への参照を取得するセレクターdocumentです。

私が見ることができる大きな違いはなく、一方から他方への顕著なパフォーマンスの向上もありません。

于 2012-09-06T19:36:15.593 に答える
7

まったく違いはないはずですが、最初のほうがパフォーマンスが少し高いかもしれませんが、それは些細なことだと思います (これについては本当に心配する必要はありません)。

<body>両方で、タグを jQuery オブジェクトにラップします

于 2012-09-06T19:35:54.063 に答える
3

出力に関しては、両方とも同等です。ただし、2番目の式はDOMルートからトップダウンルックアップを実行します。JQueryがラップオーバーするためのdocument.bodyオブジェクトがすでに手元にある場合は、追加のオーバーヘッドを回避することをお勧めします(ただし、それはごくわずかですが)。http://api.jquery.com/jQuery/#SelectorContextを参照してください

于 2012-09-06T19:55:32.763 に答える