Подтвердить что ты не робот

Что означает $($ (this))?

Я видел некоторый код в Интернете, который использует следующий оператор

if ($($(this)).hasClass("footer_default")) {
      $('#abc')
        .appendTo($(this))
        .toolbar({position: "fixed"});
    }

Каково использование $($(this)) и почему это необходимо здесь?

4b9b3361

Ответ 1

Да, $($(this)) совпадает с $(this), функция jQuery() или $() замечательно idempotent. Нет причин для этой конкретной конструкции (двойная упаковка this), однако я использую в качестве ярлыка для захвата первого элемента только из группы, которая включает в себя аналогичную двойную упаковку,

$($('selector')[0])

Какая сумма, захватить каждый элемент, который соответствует selector, (который возвращает объект jQuery), затем используйте [0], чтобы захватить первый в списке (который возвращает объект DOM), затем заверните его в $() снова, чтобы вернуть его обратно в объект jQuery, который на этот раз содержит только один элемент вместо коллекции. Это примерно эквивалентно

document.querySelectorAll('selector')[0];, что в значительной степени document.querySelector('selector');

Ответ 2

Вы можете обернуть $ столько раз, сколько хотите, это ничего не изменит.

Если foo является элементом DOM, $(foo) вернет соответствующий объект jQuery.

Если foo является объектом jQuery, $(foo) возвращает тот же объект.

Вот почему $($(this)) вернется точно так же, как $(this).

Ответ 3

Нет необходимости в двойной обертке, а $($(this)) точно такой же, как $(this).

Тем не менее, я однажды нашел эту двойную упаковку в одном файле в моем проекте, совершенную другим разработчиком. Отслеживая изменения через ревизию, оказалось, что она начиналась как $($(this).find('selector').first()) - то есть результат некоторого селектора был обернут для создания нового объекта. Затем по каким-то причинам селектор был удален и осталась только двойная упаковка this. Излишне говорить, что на следующем коммите он был изменен на $(this).

Ответ 4

Как объяснялось выше, $($(this)) и $(this) абсолютно идентичны. jQuery возвращает тот же объект jQuery, если вы пытаетесь его обернуть более одного раза.

Кроме того, для соображений производительности рекомендуется повторно использовать объекты jQuery - довольно дорого создавать объекты jQuery, особенно те, которые имеют сложные селекторы. Пример:

var $this = $(this);
if ($this.hasClass("footer_default")) {
    $('#abc')
        .appendTo($this)
        .toolbar({position: "fixed"});
}

Просто зайдите в Google для "лучших практик jQuery" - вам понадобится 30 минут, чтобы изучить эти основы, и вы будете более эффективно использовать jQuery.

Ответ 5

Нет никакого способа сделать это.

Следующий код возвращает то же самое:

console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))

логическое значение, зависящее, если выбранный элемент имеет или не класс footer_default:

.hasClass(имя класса) Возвращает: Boolean

Демо: http://jsfiddle.net/IrvinDominin/aSzFn/

Ответ 6

$(this) и $($(this)) возвращают объект jquery.

Нет никакой разницы между этими двумя.