Javascript 什么';这是'$(本)及"x27 ;;和';这个';?

Javascript 什么';这是'$(本)及"x27 ;;和';这个';?,javascript,jquery,this,Javascript,Jquery,This,我目前正在学习本教程: 对于以下两个示例: $("#orderedlist").find("li").each(function (i) { $(this).append(" BAM! " + i); }); $("#reset").click(function () { $("form").each(function () { this.reset(); }); }); 注意,在第一个示例中,我们使用$(this)在每个li元素中附加一些文本。在第二个

我目前正在学习本教程:

对于以下两个示例:

$("#orderedlist").find("li").each(function (i) {
    $(this).append(" BAM! " + i);
});
$("#reset").click(function () {
    $("form").each(function () {
        this.reset();
    });
});
注意,在第一个示例中,我们使用
$(this)
在每个
li
元素中附加一些文本。在第二个示例中,我们在重置表单时直接使用

$(this)
似乎比
this
使用得更频繁

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

基本上,我们需要
$()
来实现专门的jQuery函数

这是否正确?

是的,当您使用jQuery时,您只需要
$()
。如果您希望jQuery帮助您完成DOM工作,请记住这一点

$(this)[0] === this
基本上,每次返回一组元素时,jQuery都会将其转换为一个。如果你知道你只有一个结果,它将在第一个元素中

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

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

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

这是对调用的DOM元素的引用


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

在使用
jQuery
时,建议通常使用
$(this)
。但是如果你知道(你应该学习并知道)两者的区别,有时只使用
这个
会更方便、更快。例如:

$(".myCheckboxes").change(function(){ 
    if(this.checked) 
       alert("checked"); 
});
比其他的更简单更纯净

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

this
引用一个javascript对象,并
$(this)
用于用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')
this
是元素,
$(this)
是用该元素构造的jQuery对象

更深入的观察

包含在执行上下文中

范围是指当前的。为了理解此
,了解JavaScript中执行上下文的操作方式非常重要

执行上下文绑定了这一点

当控件进入执行上下文(代码在该范围内执行)时,变量环境被设置(词法和变量环境-基本上这设置了一个可访问的变量输入区域,以及一个存储本地变量的区域),并发生绑定

jQuery绑定了这个

执行上下文形成一个逻辑堆栈。结果是,堆栈中更深的上下文可以访问以前的变量,但它们的绑定可能已被更改每次jQuery调用回调函数时,它都会使用更改此绑定的属性

callback.apply( obj[ i ] )//where obj[i] is the current element
调用
apply
的结果是在jQuery回调函数中,
这个
引用回调函数正在使用的当前元素

例如,在
.each
中,常用的回调函数允许
.each(函数(索引,元素){/*scope*/})
。在该范围内,
this==element
为true

jQuery回调使用apply函数将被调用的函数与当前元素绑定。此元素来自jQuery对象的元素数组。构造的每个jQuery对象都包含一个元素数组,这些元素与用于实例化jQuery对象的匹配

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


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

我喜欢这个例子。谢谢@Reigel,为什么要保护它?OP询问并猜测了正确答案。@Reigel:我想我应该在meta中问这个问题,但如果这就是保护所需的全部,那么不是所有的问题都应该得到保护吗?是否有理由使用
$(this)[0]
而不是
this
,如果它们总是一样的话?@Jay如果你喜欢键入long而不是简单地使用“this”,那么是的$()是jQuery构造函数。“'this'是对调用的DOM元素的引用。因此,基本上,在$(this)中,您只是将this作为参数传递到$()中,以便可以调用jQuery方法和函数”。@jay-没有充分的理由这样做
$("#myDiv")[0] === document.getElementById("myDiv");