52 votes

Ce n' $($(this))?

J'ai vu un peu de code sur le web qui utilise l'instruction suivante

if ($($(this)).hasClass("footer_default")) {
      $('#abc')
        .appendTo($(this))
        .toolbar({position: "fixed"});
    }

Qu'est-ce que l'utilisation d' $($(this)) et pourquoi est-ce nécessaire?

78voto

chiliNUT Points 3249

Oui, $($(this)) est le même que $(this), jQuery() ou $() fonction est merveilleusement idempotent. Il n'y a aucune raison pour que la construction particulière (double emballage d' this), cependant, quelque chose que j'utilise comme un raccourci saisissant le premier élément d'un groupe, ce qui implique semblable double emballage, est

$($('selector')[0])

Ce qui revient à, de saisir tous les élément qui correspond selector, (qui retourne un objet jQuery), puis utilisez [0] pour attraper le premier sur la liste (qui renvoie un DOM objet), puis enveloppez - $() à nouveau pour l'activer de nouveau dans un objet jQuery, qui cette fois ne contient qu'un seul élément au lieu d'une collection. Il est à peu près équivalent

document.querySelectorAll('selector')[0];, ce qui est assez bien document.querySelector('selector');

29voto

fiddler Points 7421

Vous pouvez envelopper $ autant de fois que vous le voulez, ça ne changera rien.

Si foo est un élément du DOM, $(foo) sera de retour à la correspondante de l'objet jQuery.

Si foo est un objet jQuery, $(foo) sera de retour le même objet.

C'est pourquoi, $($(this)) sera de retour exactement le même que $(this).

8voto

Aleks G Points 25412

Il n'y a pas de besoin spécifique de double emballage et $($(this)) est exactement le même que $(this).

Cela dit, une fois, j'ai trouvé cette double emballage dans un fichier dans mon projet, commis par un autre développeur. Le suivi de l'évolution par le biais de la révision, s'est avéré qu'il a commencé en tant que $($(this).find('selector').first()) - c'est le résultat d'un sélecteur a été enveloppé de créer un nouvel objet. Ensuite, pour quelque raison que ce soit, le sélecteur a été supprimée et seule la double emballage d' this sont restés. Inutile de dire que, sur le prochain commit, il a été changé à l' $(this).

6voto

keaukraine Points 3606

Comme expliqué avant moi, $($(this)) et $(this) sont absolument identiques. jQuery retourne le même objet jQuery si vous essayez de l'insérer plus d'une fois.

En outre, pour des considérations de performance, il est une bonne pratique de réutiliser des objets jQuery - il est très coûteux de créer des objets jQuery, surtout celles avec des complexes de sélecteurs. Exemple:

var $this = $(this);
if ($this.hasClass("footer_default")) {
    $('#abc')
        .appendTo($this)
        .toolbar({position: "fixed"});
}

Juste google pour 'jQuery meilleures pratiques" - il faudra 30 minutes pour vous d'apprendre ces bases et vous permettra d'utiliser jQuery manière plus efficace.

3voto

Irvin Dominin Points 15736

Il n'y a pas de meainig de le faire.

Le code suivant retourne le même:

console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))

une valeur booléenne depenging si l'élément sélectionné a la classe footer_default:

.hasClass( className )Retourne: Boolean

Démo: http://jsfiddle.net/IrvinDominin/aSzFn/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X