JQuery中隐式迭代和each的区别(通过反选功能解析)
最近在學JQuery,發現它的確是個很給力的東東。。。。不過各種符號,各種選擇器,稍有點亂,還要在日后工作中經常用才能熟練起來。
今天在學習時,遇到這樣一個問題,是在做checkbox的反選按鈕時,兩種語句,感覺在理論上都能通,但實際用的時候發現有一個不好用,百思不得其解。后來想著想著,好像是想通了。。。所以就說一下JQuery中隱式迭代和each的區別。
思路一:通過隱式迭代來搞定
$("#inverseSelect").click(function(){
$(":checkbox[name=test]").attr("checked",!$(this).attr("checked"));
});
思路二:通過each來搞定
$("#inverseSelect").click(function(){
$(":checkbox[name=test]").each(function(){
//經典代碼
$(this).attr("checked",!$(this).attr("checked"));
});
});
產生的問題是,第一種居然不能用!~~~~~~~
個人認為原因是這樣:
先來個小插曲:對于JQuery中,$(":checkbox[name=test]")的返回值是個集合。但是,對它取值時,取到的是集合中的第一個Object的對象。
然后進入正題 :
所以,在方法中,$(this).attr("checked")?它的意思是取到this的checked的屬性,而問題就出在這個this.注意,它沒有放在方法里面,也就是說,this并沒有在迭代中使用,那么也就是說,this,指的并不是前面取出的這個集合中迭代的那個元素,那么,他TMD到底指的是什么呢?
開始我以為它指的是$(":checkbox[name=test]")這個集合,那么拿到的應該是第一個元素。后來我發現我錯了,它指的是居然是"反選"那個按鈕!
為什么呢?原因很簡單:
因為觀察一下,this的上一層的對象是$("#inverseSelect")啊,所以,大家明白了吧。。。。。
總而言之:this這個關鍵字,它指的是它所在方法中的那個對象。所以,第一種方法不可以。
第二種方法可以。
原因是:雖然this所在方法的對象是個集合,但是,通過each關鍵字,這樣,this每次拿到的對象,就是集合中的一個元素了。
自己研究出來的,就是有成就感!
轉載于:https://www.cnblogs.com/java0721/archive/2012/07/20/2602691.html
總結
以上是生活随笔為你收集整理的JQuery中隐式迭代和each的区别(通过反选功能解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TIOBE Programming Co
- 下一篇: HDU 2546 饭卡(贪心+DP)