일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- play 강좌
- 파이썬 강좌
- Akka
- 플레이프레임워크
- Hyperledger fabric gossip protocol
- 파이썬 데이터분석
- 하이브리드앱
- 스위프트
- 그라파나
- Play2 로 웹 개발
- CORDA
- 스칼라 동시성
- 주키퍼
- Adapter 패턴
- 스칼라
- 이더리움
- 하이퍼레저 패브릭
- Play2
- Golang
- 안드로이드 웹뷰
- 엔터프라이즈 블록체인
- 스칼라 강좌
- 파이썬 동시성
- akka 강좌
- 파이썬 머신러닝
- play2 강좌
- 블록체인
- hyperledger fabric
- Actor
- 파이썬
- Today
- Total
HAMA 블로그
[jQuery] each 루프에서의 this의 포인터에 대해서. 본문
- $(셀렉).each(function(){
- //루프돌기
- });
이런 구문을 많이 쓴다. 특히나 플러그인 제작시
- var public = {
- fn : function(){
- return this.each(function(){
- //메소드
- });
- }//END fn
- };
이런식으로 오브젝트 포인터에 대해서 return을 해주는데, 여기서 this와 $(this)의 사용이 매번 헷갈린다.
더욱이! public.fn.call(this); 라고 콜을 하는 순간! this에 대한 포인터는 안드로메다로 빠져버린다~~~ 쓩!~
애매한건 딱 정리해서 적어둬야겠다.
결론은!
each 루프 내에서 this의 포인터는 jQuery 오브젝트가 아닌 DOM 오브젝트이다.
때문에 each내에서 jQuery의 메소드를 사용하고 싶다면,
$(this)로 jQuery오브젝드로 콜을 해야 한다.
간단한 예로,
- (function($){
- var public = {
- init : function(options){
- var opt = $.extend({set:1}, options);
- return this.each(function(){
- // each 루프
- // this는 DOM 오브젝트
- // $(this)가 jQuery 오브젝트
- this.hide() // ERROR!!
- $(this).hide() // GOOD~
- };
- } //END init()
- }; //END public
- $.fn.plugin = function(method){
- return public.init.apply(this, arguments);
- };//END plugin
- })(jQuery);
이렇게 플러그인을 만들때,
최초 $.fn.plugin에서의 this는 jQuery객체 즉, $(this)를 의미한다. 그래서 jQuery의 메소드들을 사용할 수 있다.
플러그인에서 public.init.apply를 이용해 this로 콜을 했으니 this를 받은 public.init() 에서 this는 다시금 $(this)가 된다.
그래서 this.each() 와 같은 jQuery메서드를 쓸 수 있는데,
이제 each안으로 들어오면 this는 DOM오브젝트가 된다. 그래서 여기서는 this가 jQuery의 메서드를 못쓴다.
한가지 팁은 DOM객체, 여기선 HTMLElement 객체의 기본 속성값은 jQuery 객체로 변환해 사용하는 것보단, 그냥 그 자체로 사용하는게 더 빠르다. 때문에 id값이나 offset, title등의 기본 속성값은 $(this).attr(‘id’)가 아닌 this.id 등으로 사용 해 주자.
출처:http://asrahi.me/20194512596
jQuery .each() Syntax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //DOM ELEMENTS $( "div" ).each( function (index, value) { console.log( 'div' + index + ':' + $( this ).attr( 'id' )); }); //outputs the ids of every div on the web page //ie - div1:header, div2:body, div3:footer //ARRAYS var arr = [ "one" , "two" , "three" , "four" , "five" ]; jQuery.each(arr, function (index, value) { console.log( this ); return ( this != "three" ); // will stop running after "three" }); //outputs: one two three //OBJECTS var obj = { one:1, two:2, three:3, four:4, five:5 }; jQuery.each(obj, function (i, val) { console.log(val); }); //outputs: 1 2 3 4 5 |
'Javascript' 카테고리의 다른 글
잊을만할때 다시 훑어보는 Javascript (0) | 2015.05.26 |
---|---|
자바스크립트의 메모리관리 (1) | 2015.05.24 |
40 Useful JavaScript Libraries (0) | 2015.05.21 |
15 Javascript Web UI Libraries, Frameworks and Toolkits (0) | 2015.05.21 |
Javascript code editor [ACE] (0) | 2015.05.21 |