JQuery $(this) sélecteur de fonction et les limites
J'ai besoin d'aide pour comprendre $(this). Est-il possible d'affiner la mise au point de " il " à l'intérieur de parenthèses ou de ne "ce" obstacle à l'utilisation de tous les autres attributs?
Par exemple: je ne comprends pas pourquoi ce code:
$(this).children("div")
ne peut pas être réécrite comme ceci:
$(this +" div")
sans avoir à recourir à quelque chose comme:
$('#'+$(this).attr("id")+" div")
Aussi, pouvez-vous m'indiquer à " il " dans le JQuery documentation? Il est difficile de les utiliser " il " comme un terme de recherche pour des raisons évidentes.
Compte tenu de la duck-typing la nature de cette langue, comment est-il censé savoir comment vous voulez
J'ai débattu, y compris un exemple complet à l'aide d'une fonction générique, mais a décidé de le garder générique dans l'espoir que quelqu'un comme Nick allait venir 😉
this
être utilisé? Votre exemple implique qu'elle doit être une chaîne à laquelle vous pouvez ajouter des choses.J'ai débattu, y compris un exemple complet à l'aide d'une fonction générique, mais a décidé de le garder générique dans l'espoir que quelqu'un comme Nick allait venir 😉
OriginalL'auteur Brien Malone | 2011-04-10
Vous devez vous connecter pour publier un commentaire.
this
n'est pas un jQuery "chose", mais un le code JavaScript de base d'un. Il ne peut pas être ré-écrit de la manière que vous avez dans les exemples parce que c'est un objet, en particulier, soit d'un élément du DOM ou un objet jQuery (en fonction de ce contexte, vous êtes). Donc, si vous avez fait ceci:Ce que vous souhaitez vraiment faire est d'appeler
.toString()
surthis
pour concaténer des chaînes de caractères, ce qui entraîne:....ce qui n'est pas valide d'un sélecteur.
Comme pour d'autres lectures, je crois cet article continue d'être l'une des meilleures références/ressources pour apprendre ce
this
(un contexte de mot-clé.Par commentaire demandes, voici quelques exemples de ce que
this
est en différents endroits:$("selector").click(function() { alert(this); });
this
se réfère à l'élément DOM le gestionnaire d'événement est déclenché.$.fn.myPlugin = function() { alert(this); });
this
est l'objet jQuery, le plugin a été appelé/lié, par exemple:$("selector").myPlugin();
,this
est que$("selector")
objet jQuery.function myFunc() { alert(this); };
this
est le contexte dans lequel vous êtes, que ce soit un objet ou quelque chose d'autre, quelques exemples:$("selector").click(myFunc);
-this
est l'élément DOM, comme ci-dessus$("selector").click(function() { myFunc(); });
-this
est le contenu global,window
myFunc.call(whatThisIs, arg1, arg2);
-this
estwhatThisIs
Function.call()
etFunction.appliquer()
pour plus d'infopourriez-vous élaborer sur la question asker sur ce
this
est et ce qu'il désigne généralement dans la plupart des contextes relatifs à l'utilisation de jQuery (c'est à dire que je suis en train de penser à l'intérieur de plugins, les gestionnaires d'événements, etc)?Bien que vous pourriez probablement monkey patch de l'objet
.toString
pour renvoyer la bonne id...bon point sur les exemples, ajouté à plusieurs 🙂
+1 - à la recherche d'une réponse comme ça pendant un moment maintenant! Je vois beaucoup de personnes répondant à des questions à l'aide de
$(this + 'string')
- mais pas la bonne, il ne semble pas fonctionner. Aucune idée pourquoi?OriginalL'auteur Nick Craver
Utilisation
.find()
Ou utiliser le
context
paramètrejQuery( sélecteur, contexte )
(en interne, il appelle juste trouver de toute façon...)OriginalL'auteur gnarf
this
n'est pas une chaîne de caractères représentant un sélecteur css(commediv
,#my_id
ou.my_class
).Lors du passage de
this
comme un argument de la fonction jQuery, elle retourne un objet jQuery basé sur l'élément en cours(ce que cela renvoie à), de sorte que vous ne pouvez pas utiliser quelque chose comme$(this + selector)
.OriginalL'auteur gion_13
Vous pouvez prendre un coup d'oeil à ceci: http://api.jquery.com/each/
Fondamentalement
this
est l'élément DOM que le rappel est le référencement. Vous ne pouvez pas faire$(this + " div")
parce que vous êtes l'ajout d'une chaîne à un élément. Vous devez d'abord obtenir l'id comme dans votre troisième extrait de code.Par la voie,
$(this).children("div")
n'est pas le même que$('#'+$(this).attr("id")+" div")
Tout d'abord,
this
pourrait ne pas avoir une carte d'identité, auquel cas le second moyen de ne pas travailler du tout. Et même si elle dispose d'un IDENTIFIANT, que le deuxième code est actuellement$(this).find("div")
. Si vous voulez des enfants que vous avez à faire:OriginalL'auteur tster
Tout d'abord, vous devez comprendre ce qui est ce, il est dépendent d'un contexte.
Lorsque vous appelez la fonction $ il retourne un objet jQuery.
Cela signifie de l'objet spécifique, scolariser tous les enfants, voir le lien ci-dessous:
http://jsfiddle.net/vietean/f2Yrg/
OriginalL'auteur vietean