12
votes

jQuery $ (this) sélecteur de sélecteur et limitations

J'ai besoin d'aide pour comprendre $ (this) code>. Est-il possible de limiter le centre de "ceci" dans les parenthèses ou "ceci" empêche-t-il l'utilisation de tout autre attributs?

Par exemple: Je ne comprends pas pourquoi ce code: P>

$('#'+$(this).attr("id")+ " div")


2 commentaires

Compte tenu de la nature de typage de canard de cette langue, comment est-il censé savoir comment vous voulez ce à utiliser? Votre exemple implique que cela devrait être une chaîne à laquelle vous pouvez ajouter des choses à apporter.


J'ai débattu d'inclure un exemple complet à l'aide d'une fonction générique, mais j'ai décidé de le garder générique dans l'espoir que quelqu'un comme Nick viendrait;)


5 Réponses :


24
votes

Ceci code> isn ' T a jQuery "chose", mais un Basic Javascript one . Il ne peut pas être ré-écrit comme vous avez des exemples car c'est un objet, en particulier un élément DOM ou un objet JQuery (selon le contexte que vous êtes). Donc, si vous l'avez fait:

 $("[object Object] div")


4 commentaires

+1 pour une bonne explication de la raison pour laquelle vous ne pouvez pas le faire de cette façon


Pourriez-vous élaborer pour l'astuché de la question sur ce que Ce est et ce qu'il fait généralement référence à la plupart des contextes par rapport à l'utilisation de JQuery (c'est-à-dire que je pense à l'intérieur des plugins, des gestionnaires d'événements, etc.)?


Bien que vous puissiez probablement le singe patch le .tostring de l'objet pour renvoyer le bon identifiant ...


+1 - Je cherche une réponse comme celle-ci pendant un moment maintenant! Je vois beaucoup de gens répondant aux questions en utilisant $ (ceci + 'string') - mais pas correct, il semble fonctionner. Une idée pourquoi?



9
votes

Utilisez .Find () code>

$( 'div', this )


0 commentaires

0
votes

Ceci n'est pas une chaîne représentant un sélecteur CSS (tel que div , #my_id ou .My_class . ).
Lorsque vous passez Ceci comme argument de la fonction JQuery, il renvoie un objet JQuery basé sur l'élément actuel (ce que cela se réfère à), vous ne pouvez donc pas utiliser quelque chose comme $ (ce sélecteur +) .


0 commentaires

0
votes

Vous pouvez regarder cela: http://api.jquerery.com/each/

Fondamentalement Ceci code> est l'élément DOM que le rappel est référencé. Vous ne pouvez pas faire $ (ceci + "div") code> car vous ajoutez une chaîne à un élément. Vous avez d'abord besoin d'obtenir l'identifiant comme dans votre extrait de code troisième code. P>

au fait, $ (ceci) .children ("div") code> n'est pas le même que $ ('#' + $ (this) .attr ("id") + "div") code> p>

premier off, Ce code> pourrait ne pas avoir d'identifiant , auquel cas la deuxième façon ne fonctionnera pas du tout. Et même s'il a un identifiant, ce deuxième code est actuellement $ (this) .Find ("div") code>. Si vous voulez des enfants que vous réservez uniquement: P>

$('#'+$(this).attr("id") + " > div")


0 commentaires

0
votes

Tout d'abord, vous devez comprendre ce qui est ceci fort>, il dépend d'un contexte. Lorsque vous appelez $ fonction, il retournera un objet JQuery.

$(this).children("div")


0 commentaires