Отредактировано, чтобы лучше ответить на ваш вопрос:
Сначала посмотрите на соответствующий код здесь , вот как jQuery обрабатывает вызов $()
. Когда вы передаете элемент DOM (который является this
, это сам div), контекст является самим элементом DOM, это лучше позволяет обрабатывать фрагменты документа и т. Д. Когда вы передаете строку, контекст по умолчанию равен document
(потому что это главный предок для поиска). Помните, что $(selector, context)
на самом деле вызывает context.find(selector)
под прикрытием, поэтому имеет смысл начать с документа, если ничего не указано.
Примечание: вы всегда можете проверить контекст, это доступное свойство, например: $(this).context
Для поведения .add()
:
.add()
использует тот же контекст для выбора, что и добавляемый вами элемент jQuery, так что вы видите ожидаемое поведение. Для лучшего описания посмотрите, как написано .add()
:
add: function( selector, context ) {
var set = typeof selector === "string" ?
jQuery( selector, context || this.context ) :
jQuery.makeArray( selector ),
all = jQuery.merge( this.get(), set );
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
all :
jQuery.unique( all ) );
}
Обратите внимание, как он использует текущий контекст, если ничего не передано. Чтобы переопределить это, он принимает контекст, в который вы можете передать document
и получить желаемый результат, например:
$('#div1').click(function() {
$(this).add('#div2', document).remove();
});