Étant donné l'exemple HTML suivant ...fonction jQuery add() et le contexte des objets jQuery
<div id='div1'>div one</div>
<div id='div2'>div two</div>
... Je trouve que le code jQuery suivant ...
$('#div1').click(function() {
var $d = $(this); // Using 'this' instead of '#div1'
$d.add('#div2').remove();
});
. ..would pas ajouter #div2
à l'ensemble référencé par $d
, mais ce code ...
$('#div1').click(function() {
var $d = $('#div1'); // Using '#div1' instead of 'this'
$d.add('#div2').remove();
});
.. .successfully ajouté #div2
.
Sur Firebug conseil, je trouve que l'utilisation $(this)
a donné l'objet jQuery un contexte de #div1
, mais cela a donné $('#div1')
l'objet un contexte de document
.
Compte tenu de cette information, j'ai essayé ...
var $d = $(this, document);
... et la fonction add()
a fonctionné comme prévu.
Alors, voici la question. Est-ce que quelqu'un pourrait m'expliquer pourquoi un contexte différent est attribué lors de l'utilisation de vs $('#div1')
?
Merci pour la réponse. Je pense que je ne comprends peut-être pas le but/l'utilisation du contexte d'un objet jQuery. Pourquoi '$ d' a-t-il un contexte de' # div1' à la place de 'document'? – user113716
@patrick - Vous pouvez voir comment '$ (this)' est traité ici: http://github.com/jquery/jquery/blob/master/src/core.js#L59 Quand vous faites '$ (DOMElement)' le contexte est cet élément DOM, juste comment cela fonctionne. Par exemple, vous pourriez avoir affaire à un élément qui n'est pas dans le DOM, dans un fragment de document par exemple, donc 'document' ne fonctionne pas toujours. –
@patrick - J'ai relu votre article et j'ai réécrit la plupart de la réponse pour mieux répondre à votre question principale, j'espère que cela clarifie un peu plus, laissez-moi savoir si elle laisse encore des questions. –