Учитывая следующий пример HTML ...JQuery добавить() функция и контекст JQuery объектов
<div id='div1'>div one</div>
<div id='div2'>div two</div>
... Я обнаружил, что следующий код JQuery ...
$('#div1').click(function() {
var $d = $(this); // Using 'this' instead of '#div1'
$d.add('#div2').remove();
});
. не ..would добавить #div2
к набору, на который ссылается $d
, но этот код ...
$('#div1').click(function() {
var $d = $('#div1'); // Using '#div1' instead of 'this'
$d.add('#div2').remove();
});
.. . успешно добавлено #div2
.
посоветовавшись поджигатель, я обнаружил, что с помощью $(this)
дал JQuery объект контекст #div1
, но делать $('#div1')
дал объект контекст document
.
С учетом этой информации я пытался ...
var $d = $(this, document);
... и add()
функция работала, как ожидалось.
Итак, вот вопрос. Может кто-нибудь объяснить мне, почему другой контекст присваивается при использовании $(this)
против $('#div1')
?
Спасибо за ответ. Я думаю, может быть, я просто не понимаю цели/использования контекста объекта jQuery. Почему «$ d» имеет контекст '# div1', а не' document'? – user113716
@patrick - Вы можете увидеть, как обрабатывается '$ (this)': http://github.com/jquery/jquery/blob/master/src/core.js#L59 Когда вы выполняете '$ (DOMElement)' контекст - это элемент DOM, как это работает. Например, вы можете иметь дело с элементом, который отсутствует в DOM, например, в фрагменте документа, поэтому 'document' не всегда работает. –
@patrick - я перечитал ваше сообщение и переписал большую часть ответа, чтобы лучше ответить на ваш главный вопрос, надеюсь, что это еще раз пояснит его, сообщите мне, если он все еще оставляет вопросы. –