Ответ 1
Отредактировано, чтобы лучше ответить на ваш вопрос:
Сначала рассмотрим соответствующий код здесь, так как 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();
});