'$(this)'和& # 39;这个# 39;?

我目前正在完成这个教程:jQuery入门

对于下面两个例子:

$("#orderedlist").find("li").each(function (i) {
$(this).append(" BAM! " + i);
});
$("#reset").click(function () {
$("form").each(function () {
this.reset();
});
});

注意,在第一个示例中,我们使用$(this)在每个li元素内部附加一些文本。在第二个例子中,我们在重置表单时直接使用this

$(this)似乎比this使用得更多。

我猜在第一个例子中,$()是将每个li元素转换为一个jQuery对象,它可以理解append()函数,而在第二个例子中,reset()可以直接在表单上调用。

基本上,我们需要$()来实现特殊的jquery函数。

这对吗?

585814 次浏览

当你使用jQuery时,你只需要$()。如果你需要jQuery的帮助来做DOM的事情,请记住这一点。

$(this)[0] === this

基本上每次你得到一组元素回来,jQuery就会把它变成jQuery对象。如果你知道你只有一个结果,它就会在第一个元素中。

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

等等……

是的,通过使用$(this),您为对象启用了jQuery功能。通过使用this,它只有一般的Javascript功能。

是的,jQuery函数需要$(this),但是当你想要访问不使用jQuery的元素的基本javascript方法时,你可以只使用this

$()是jQuery的构造函数。

this是对调用的DOM元素的引用。

因此,基本上,在$(this)中,您只是将this作为参数传递给$(),以便您可以调用jQuery方法和函数。

当使用jQuery时,建议通常使用$(this)。但是如果你知道(你应该学习并知道)其中的区别,有时只使用this会更方便和更快。例如:

$(".myCheckboxes").change(function(){
if(this.checked)
alert("checked");
});

更容易更纯粹吗

$(".myCheckboxes").change(function(){
if($(this).is(":checked"))
alert("checked");
});

this引用javascript对象,$(this)使用jQuery封装。

# EYZ0

// 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')

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);
});

更深层次的观察

< em > < a href = " https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this " > # EYZ0 <一口> MDN < /一口> < / >包含在执行上下文中

作用域指向当前的执行背景信息ECMA . ECMA . ECMA . ECMA ="http://www.ecma-international.org/ecma-262/5.1/#sec-10.3">执行背景信息。为了理解this,理解JavaScript中执行上下文的操作方式是很重要的。

执行上下文将其绑定

当控制进入一个执行上下文(代码在该范围内执行)时,变量的环境就被设置好了(词法和变量环境——本质上,这为已经可以访问的变量设置了一个区域,并为要存储的局部变量设置了一个区域),this的绑定就发生了。

jQuery绑定了这个

执行上下文形成一个逻辑堆栈。结果是堆栈中较深的上下文可以访问先前的变量,但它们的绑定可能已经更改。使用< a href = " https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply " > # EYZ0 <一口> MDN < /一口> < / > jQuery每次调用回调函数时,都会改变this绑定

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对象的selectorjQuery API

$(selector)调用jQuery函数(记住,$是对jQuery的引用,代码:window.jQuery = window.$ = jQuery;)。jQuery函数在内部实例化一个函数对象。因此,虽然可能不是很明显,但在内部使用$()会使用new jQuery()。这个jQuery对象的构造部分是查找选择器的所有匹配项。构造函数还将接受html字符串和元素。# EYZ9。jQuery对象然后包含匹配选择器的DOM元素的类数组结构(或者在this的情况下只有单个元素)。

一旦构造了jQuery对象,jQuery API现在就公开了。当jQuery api函数被调用时,它会在内部遍历这个类似数组的结构。对于数组中的每一项,它调用api的回调函数,将回调的this绑定到当前元素。在上面的代码片段中可以看到这个调用,其中obj是类数组结构,i是用于当前元素在数组中的位置的迭代器。