В чем разница между "$(this) " и "this"?
в настоящее время я работаю в данном руководстве: начало работы с jQuery
для двух примеров ниже:
$("#orderedlist").find("li").each(function (i) {
$(this).append(" BAM! " + i);
});
$("#reset").click(function () {
$("form").each(function () {
this.reset();
});
});
обратите внимание, в первом примере, мы используем $(this)
чтобы добавить некоторый текст внутри каждого li
элемент. Во втором примере мы используем this
непосредственно при сбросе формы.
$(this)
Кажется, используется намного чаще, чем this
.
мое предположение в первом примере,$()
is преобразование каждого li
элемент в объект jQuery, который понимает append()
функции, тогда как во втором примере reset()
можно вызвать непосредственно на форме.
в основном нам нужны $()
для специальных функций jQuery-only.
это правильно?
7 ответов:
Да вам только нужно
$()
когда вы используете jQuery. Если вы хотите, чтобы помощь jQuery делала вещи DOM, просто имейте это в виду.$(this)[0] === this
В основном каждый раз, когда вы получаете набор элементов обратно jQuery превращает его в объект jQuery. Если вы знаете, что у вас есть только один результат, он будет в первом элементе.
$("#myDiv")[0] === document.getElementById("myDiv");
и так далее...
$()
- Это функция конструктора jQuery.
this
является ссылкой на элемент DOM вызова.так что в принципе, в
$(this)
, вы просто передаетеthis
in$()
в качестве параметра, чтобы вы могли вызывать методы и функции jQuery.
да, вам нужен
$(this)
для функций jQuery, но когда вы хотите получить доступ к основным методам javascript элемента, которые не используют jQuery, вы можете просто использоватьthis
.
при использовании
jQuery
, рекомендуется использовать$(this)
обычно. Но если вы знаете (вы должны выучить и знать) разницу, иногда это удобнее и быстрее использовать простоthis
. Например:$(".myCheckboxes").change(function(){ if(this.checked) alert("checked"); });
легче и чище, чем
$(".myCheckboxes").change(function(){ if($(this).is(":checked")) alert("checked"); });
this
является элемент$(this)
является ли объект jQuery, построенный с этим элементом$(".class").each(function(){ //the iterations current html element //the classic JavaScript API is exposed here (such as .innerHTML and .appendChild) var HTMLElement = this; //the current HTML element is passed to the jQuery constructor //the jQuery API is exposed here (such as .html() and .append()) var jQueryObject = $(this); });
более глубокий взгляд
this
MDN содержится в контексте выполненияобласть относится к текущему Контекст Исполнения ECMA. Для того, чтобы понять
this
важно понимать путь контексты выполнения работают в JavaScript.контексты выполнения связывают это
когда элемент управления входит в контекст выполнения (код выполняется в этой области), среда для переменных настраивается (лексические и переменные среды-по существу, это устанавливает область для переменных, которые уже доступны, и область для локальных переменных, которые будут сохранены), и привязка
this
происходит.в jQuery связывает это
контексты выполнения образуют логический стек. В результате контексты глубже в стеке имеют доступ к предыдущим переменным, но их привязки могут быть изменены. каждый раз, когда jQuery вызывает функцию обратного вызова, он изменяет эту привязку С помощью
apply
MDN.callback.apply( obj[ i ] )//where obj[i] is the current element
результат вызова
apply
это внутри функций обратного вызова jQuery,this
относится к текущий элемент используется функцией обратного вызова.например,
.each
, обычно используемая функция обратного вызова позволяет.each(function(index,element){/*scope*/})
. В этом объеме,this == element
- это правда.обратные вызовы jQuery используют функцию apply для привязки вызываемой функции к текущему элементу. Этот элемент поступает из массива элементов объекта jQuery. Каждый построенный объект jQuery содержит массив элементов, которые соответствуют селектор jQuery API это было использовано для создания экземпляра объекта jQuery.
$(selector)
вызывает функцию jQuery (помните, что$
ссылочкаjQuery
, код:window.jQuery = window.$ = jQuery;
). Внутри функция jQuery создает экземпляр объекта функции. Так что пока это может быть не сразу очевидно, используя$()
внутренне используетnew jQuery()
. Частью построения этого объекта jQuery является поиск всех совпадений селектора. Этот конструктор также будет принимать html строки и элементов. при передачеthis
в конструктор jQuery вы передаете текущий элемент для объекта jQuery, который будет построен с помощью. Объект jQuery содержит массив как структура DOM-элементы, соответствующие селектору (или только один элемент в случаеthis
).после того, как объект jQuery построен, API jQuery теперь открыт. Когда функция api jQuery является она внутренне перебрать этот массив как структура. Для каждого элемента в массиве он вызывает функцию обратного вызова для api, связывая обратный вызов
this
к текущему элементу. Этот вызов можно увидеть в фрагменте кода выше, гдеobj
массив как структура, иi
- это итератор, используемый для позиции в массиве текущего элемента.
да, с помощью
$(this)
, вы включили функциональность jQuery для объекта. Просто используяthis
, Он имеет только общие функции Javascript.
этой ссылка на объект javascript и $(этот) используется для инкапсуляции с помощью jQuery.
пример =>
// Getting Name and modify css property of dom object through jQuery var name = $(this).attr('name'); $(this).css('background-color','white') // Getting form object and its data and work on.. this = document.getElementsByName("new_photo")[0] formData = new FormData(this) // Calling blur method on find input field with help of both as below $(this).find('input[type=text]')[0].blur() //Above is equivalent to this = $(this).find('input[type=text]')[0] this.blur() //Find value of a text field with id "index-number" this = document.getElementById("index-number"); this.value or this = $('#index-number'); $(this).val(); // Equivalent to $('#index-number').val() $(this).css('color','#000000')