11
votes

jquery $ (this) vs variable

donné: xxx

Je me demande qui est plus rapide: xxx

ou: xxx < / pré>

ou est-ce important?


0 commentaires

7 Réponses :


2
votes

La vitesse serait probablement la même, mais en utilisant $ (ceci) est bien meilleure, car vous n'avez pas à vous soucier de l'élément d'être réaffecté à autre chose (ou la valeur de l'élément étant entièrement perdue).

Également, si vous refacteur et utilisez un sélecteur pour une classe au lieu d'un élément spécifique, la fonction fonctionnera pour tous les éléments appariés, pas seulement celui.


0 commentaires

0
votes

Je préférerais la seconde. Si vous avez déjà voulu refroidir la fonction et le réutiliser pour un autre bouton, il serait plus portable.


0 commentaires

0
votes

$ (Ceci) provoque un appel de fonction, votre premier exemple est théoriquement plus rapide, mais probablement pas par beaucoup.


0 commentaires

1
votes

Le premier est plus rapide. La seconde exécute deux fois le même sélecteur. Cela dit, vous n'utiliserez que ce code une fois en utilisant la première méthode, ce n'est probablement pas ce que vous voulez la plupart du temps.

Dans la pratique, utilisez un motif comme: p>

$('stuff').click(function(){
    var $$ = $(this); 
    $$.dosomething();
    $$.dosomethingelse();
)}


0 commentaires

1
votes

Bien jQuery a son cache unique des éléments DOM (qui ont déjà été touchés une fois par JQuery), donc dans la plupart des cas, cela ne fera pas une réelle différence.

Je ne crois pas vraiment que ceci est votre cas, JQuery enveloppera réellement la ceci qui est l'élément, de sorte que vous n'exécutez pas vraiment une requête de quelque sorte deux fois.

BTW , dans certains cas, cela fait une différence (lors de la délégation par exemple).


0 commentaires

4
votes

Utiliser élément .

si élément était une collection JQUERY correspondant à un seul élément, par exemple, $ ( anormal ) , alors utilisez-le simplement.

si le sélecteur était censé correspondre à plus d'un élément, alors élément est en fait éléments , Une collection d'éléments, donc, dans ce cas, vous utilisez $ (this) à l'intérieur de votre gestionnaire de clic pour attraper celui qui clique en réalité cliqué.

La différence est expliquée sur ses exemples suivants:

1- manutention sur un seul élément xxx

2- gestionnaire sur plusieurs éléments xxx

3 - gestionnaire sur un seul élément, mais appelé à plusieurs éléments enfants xxx

Je trouve cela assurer (et moins de travail, une très minuscule différence cependant) à l'enveloppe existante, montrant que Je m'attends à un seul élément dans ce cas et je travaille juste avec ça. Et utiliser $ (this) lorsque je traite d'éléments d'une collection d'éléments assortis.


0 commentaires

0
votes

Ce serait plus rapide:

//<a href="#" id="element">click me</a>

var element = $('#element');
element.dosomething = function () {
    alert('did something');   
    return false;
}
element.bind('click', element.dosomething);


1 commentaires

Cela ne fonctionnerait pas: élément.bind ('click', élément.dosomething); ... parce que vous passez une fonction qui va maintenant être appelée à partir du contexte d'un élément DOM au lieu de un objet jquery. Votre exemple peut fonctionner car vous avez défini une fonction arbitraire sur cet objet jQuery spécifique, mais ce n'est pas probablement le cas réel ici.