在使用jQuery操作JavaScript时,区分this与$(this)是十分关键的。在JavaScript中,this关键字代表当前执行上下文的当前对象,也就是说,它指向正在调用函数的对象。在jQuery中,$(this)的作用就是将原生JavaScript的this关键字获取到的DOM元素包装成jQuery对象,这样就可以调用jQuery为元素集合提供的丰富方法,比如.css()、.val()等等。
通过给出的代码示例,我们可以看到,在不同的事件处理函数中,this的指向是不同的。在jQuery中,当我们在元素上绑定事件,比如mousedown或click事件时,事件处理函数内的this默认会指向触发事件的DOM元素。例如,在下面的代码中:
```javascript
$("#zz").mousedown(function(){
DragElement=this; // 这里this指的就是$("#zz")这个DOM元素对象
$(document).mousemove(function(){
if直接$(this).css("left") // 由于是在mousemove内,这里this对象就不是$("#zz")了,
// 因为这里的this指向的是document对象
$(DragElement).css("left"); // 这样取得的是$("#zz")的jQuery对象
});
});
```
在这个例子中,当我们在$("#zz")元素上绑定mousedown事件,并在该事件内再绑定一个document的mousemove事件。在mousemove的事件处理函数中,直接使用$(this)是无法获取到$("#zz")元素的jQuery对象,因为这里的this指的是document对象。因此,我们使用了一个外部定义的变量DragElement来存储$("#zz")的DOM对象,并通过$(DragElement)将其转换为jQuery对象,从而可以使用jQuery的方法。
而$(this)的使用就是将原生DOM对象包装成jQuery对象的过程。由于$()函数是jQuery的一个入口,当我们传入一个DOM对象进去,它就返回该DOM元素的jQuery封装对象,从而可以使用jQuery提供的操作。
举个例子:
```javascript
$('#btn').bind("click",function(){
alert(this); // 这里会弹出原生的DOM元素对象
alert($(this)); // 这里会弹出jQuery对象
});
```
在这个例子中,当按钮被点击时,this指向触发click事件的原生HTML按钮元素。如果我们想调用jQuery的方法,比如.css()、.val(),我们就要用$(this),它将DOM元素转换成了jQuery对象,让我们可以使用jQuery的API。
通过这两个简单的例子我们可以得出一些结论:
1. 在原生JavaScript代码中使用this时,它代表的是当前事件处理器正在操作的DOM元素。但不能直接使用jQuery方法,因为jQuery方法是定义在jQuery对象上的。
2. $(this)可以将this所引用的DOM元素转换为jQuery对象。转换后的对象可以使用jQuery提供的所有方法和属性。
3. 在不同的事件上下文中,比如在事件委托的子事件中,获取的this可能与预期的DOM元素不一致,这时可以通过存储或传递DOM元素来保证$(this)正确地返回期望的jQuery对象。
通过掌握this和$(this)的使用,开发者可以更灵活地在jQuery和原生JavaScript之间切换,利用各自的优点,编写更加高效和可靠的代码。同时,理解这一点对于掌握jQuery框架的深层次使用至关重要。