jQuery中this与$(this)的区别

最近在使用jQuery的时候,发现有时候直接通过this来调用jquery所特有的方法或属性的时候会报错误:对象不支持此属性或方法。比如下面的程序,红色的代码段运行正常,蓝色的代码段运行报错。
<script type="text/javascript">
 $("img").each(function(i){
  this.src="img/slide-"+i+".jpg";
  });
 
 $("div").each(function(){
  this.toggleClass("box");
  });
</script>

于是用下面直接返回this和$(this)的方式测试了一下,

<script type="text/javascript">
$("#btn").bind("click",function(){
 alert(this);
 alert($(this));
 });
</script>

返回结果:

[object HTMLInputElement]

[object Object]

 
 

 可见,this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性,方法。$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。

由此可见,上面红色代码.src本身就是html对象,所以可以写成this.src,蓝色代码.toggleClass是jQuery对象,所以写成this.toggleClass肯定会报错了,$(this).toggleClass才是正确的写法。


===================================================================

由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。

=====================================================================

对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个<div>元素的内容。有如下两种方法:

$("div").eq(2).html();             //调用jquery对象的方法
$("div").get(2).innerHTML;      //调用dom的方法属性

=========================================================================
集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:

$("p").each(function(i){this.style.color=['#f00','#0f0','#00f']})     
//为索引分别为0,1,2的p元素分别设定不同的字体颜色。
$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})     
//实现表格的隔行换色效果
$("p").click(function(){.html())})             
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

相关推荐