Dado el siguiente ejemplo HTML ...jQuery add() la función y el contexto de jQuery objetos
<div id='div1'>div one</div>
<div id='div2'>div two</div>
... me encontré con que el siguiente código de jQuery ...
$('#div1').click(function() {
var $d = $(this); // Using 'this' instead of '#div1'
$d.add('#div2').remove();
});
. no ..would añadir #div2
al conjunto referenciado por $d
, pero este código ...
$('#div1').click(function() {
var $d = $('#div1'); // Using '#div1' instead of 'this'
$d.add('#div2').remove();
});
.. .successfully added #div2
.
Al firebug consultoría, he encontrado que el uso de $(this)
dio el objeto jQuery un contexto de #div1
, pero haciendo $('#div1')
dio el objeto de un contexto de document
.
Dada esta información Probé ...
var $d = $(this, document);
... y el add()
función funcionó como se esperaba.
Así que aquí está la pregunta. ¿Podría alguien explicarme por qué se asigna un contexto diferente al usar $(this)
frente a $('#div1')
?
Gracias por la respuesta. Creo que tal vez no entiendo el propósito/uso del contexto de un objeto jQuery. ¿Por qué '$ d' tiene un contexto de' # div1' en primer lugar en lugar de 'document'? – user113716
@patrick - Puedes ver cómo '$ (this)' se maneja aquí: http://github.com/jquery/jquery/blob/master/src/core.js#L59 Cuando haces '$ (DOMElement)' el contexto es ese elemento DOM, cómo funciona. Por ejemplo, podría tratarse de un elemento que no está en el DOM, en un fragmento de documento, por ejemplo, por lo que 'document' no siempre funciona. –
@patrick - Releí tu publicación y volví a escribir la mayor parte de la respuesta para abordar mejor tu pregunta principal, espero que eso la aclare un poco más, avísame si todavía deja preguntas. –