jQuery: разница между указателями $(this) и this

Вопрос

Я не совсем понимаю разницу между указателями $(this) и this в jQuery. Судя по всему, $(this) используется куда более чаще.

Предположим, есть 2 фрагмента кода:

$("#orderedlist").find("li").each(function(i) {
    $(this).append( "Номер " + i );
});
$("#reset").click(function() {
    $("form").each(function() {
       this.reset();
    });
});

В первом фрагменте мы использовали $(this), чтобы добавить некий текст внутрь каждого элемента li. Насколько я понимаю, мы выбрали именно этот указатель, поскольку нам необходимо обратится элементу списка, так сказать, не в его «первозданном» виде, а в виде jQuery-сущности, чтобы вызвать метод append().

Во втором примере мы использовали непосредственно this для сброса формы. Метод reset() - это прямой JavaScript-метод, обращаться к форме как jQuery-сущности нет необходимости.

Я правильно понимаю ситуацию? Спасибо большое!


Ответ №1

Да, Вы всё правильно понимаете. Вам нужен $(this), когда Вы собираетесь работать с объектом jQuery. Если же Вы хотите обратиться напрямую к объекту DOM, тогда Вам нужен именно this.

Стоит учитывать, что jQuery всегда возвращает массив, даже в том случае, если найден всего один элемент (тогда он будет первым, а точнее - нулевым элементом массива). Поэтому справедливым будет выражение $(this)[0] == this. Здесь важно понимать, что обращение к элементу jQuery по индексу в квадратных скобках вернёт не объект типа jQuery (как мог бы подумать новичёк), а соответствующий ему объект DOM. Если же вы хотите из массива jQuery получить первый объект в виде jQuery-сущности, используйте для этого функцию eq().

Учитывая вышесказанное, справедливым будет выражение:

$("#mydiv")[0] == document.getElementById("mydiv")

Нет комментариев

Добавить комментарий


(обязательно)