0

私は次のようなコードを持っています:

$('.someClass').each(function() {
    $(this).on(...);
});

$('.someClass').on(...);

コードの最初と2番目のスニペットの舞台裏で何が起こっていますか?2つ目ははるかに高速に動作し、最初のものと同じ結果が得られることに気付きました。

4

2 に答える 2

0

まず、最初のスニペットでは、結果の要素ごとに個別のjQueryオブジェクトを作成しています。これは、追加の時間がかかることと関係があると思います。

于 2013-03-19T22:40:55.823 に答える
0

簡単な行で、指定されたセレクターを使用してイベントバインディング.on()の関数を内部的に実行し.each()ます(コードとして.someClass)。

のスニペットを参照してください.on()

 on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
    var type, origFn;

    // Types can be a map of types/handlers
    if ( typeof types === "object" ) {
        // ( types-Object, selector, data )
        if ( typeof selector !== "string" ) {
            // ( types-Object, data )
            data = data || selector;
            selector = undefined;
        }
        for ( type in types ) {
            this.on( type, selector, data, types[ type ], one );
        }
        return this;
    }

    if ( data == null && fn == null ) {
        // ( types, fn )
        fn = selector;
        data = selector = undefined;
    } else if ( fn == null ) {
        if ( typeof selector === "string" ) {
            // ( types, selector, fn )
            fn = data;
            data = undefined;
        } else {
            // ( types, data, fn )
            fn = data;
            data = selector;
            selector = undefined;
        }
    }
    if ( fn === false ) {
        fn = returnFalse;
    } else if ( !fn ) {
        return this;
    }

    if ( one === 1 ) {
        origFn = fn;
        fn = function( event ) {
            // Can use an empty set, since event contains the info
            jQuery().off( event );
            return origFn.apply( this, arguments );
        };
        // Use same guid so caller can remove using origFn
        fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
    }
    return this.each( function() {
        jQuery.event.add( this, types, fn, data, selector );
    });
}

したがって、コードの最初のスニペットを通過する場合、つまり。.on()内で呼び出すことにより、.each()その要素自体に対しても.on()実行されます。.each()

于 2013-03-19T22:41:03.467 に答える