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元素则弹出其内容