2010-07-07 3 views
10

이 하나에 해당이 줄"this"구문은 어떻게 작동합니까?

$(this).attr("id").replace("_button",""); 

인가?

this.attr("id").replace("_button",""); 
+2

이 코드에 대한 자세한 내용은 도움이 될 것입니다. 나는 대답을 남겼으나 이것이 어디서 왔는지에 따라 틀릴 수있는 몇 가지 가정을했다. – spinon

답변

9

this은 항상 object of invocation에 대한 참조를 포함하고 있기 때문에 실제로 에 의존하며 코드를 호출합니다. 당신이 jQuery event handler 내에서 이것을 호출하면

thisDOM element 자체에 대한 참조입니다, 그래서 당신은 당신이 그것에 jQuery를 메서드를 호출하기 전에 $()를 호출하여 jQuery를 객체로 번역해야합니다. 즉, 의미는

this.attr("id").replace("_button",""); 

입니다.

당신은 예를 들어 플러그인 방식을 writting 경우

, this 이미 jQuery object ( reference) IS 두 선이 같은 사실을 것입니다. 물론 this이 이미 jQuery object 인 경우 추가 작업을하고 다시 구문 분석을 시도하십시오.

예 :

$.fn.yourplugin = function(){ 
    // this refers to a jQuery object 
    return this.each(function(i,v){ 
    }); 
}); 
+0

+1 : 거의 똑같은 생각을 가지고있는 +1 : p (복사 붙여 넣기 : D) (그리고 나는 호출 대상 *을 좋아합니다.) –

+0

방금 ​​깨달았습니다. 그 crockford 맞아, 그는 어딘가에 '이'에 대해 이야기하기 어렵다고 언급했다. "당신이 이것을 부르는 경우"는 독자에게 이미 문제가됩니다. – jAndy

0

아니요. jquery 메소드에 사용 된 클로저의 컨텍스트에있는 것처럼 들립니다. 함수 내에서 현재 DOM 객체를 가리키고 jquery 함수는 불가능합니다. 그것이 jquery 함수로 포장되어 그 객체를 얻는 이유입니다.

4

상황에 따라 다르지만 그렇지 않을 수 있습니다.

당신이 이벤트 핸들러가있는 경우

는 말 :

$('#_button_foo').click(function() { 
    $(this).attr("id").replace("_button",""); 
}); 

그런 다음 thisDOM 요소 $(this) 반면이의 jQuery 객체를 만들고이 객체에 jQuery를 함수를 호출하게 참조 할 것이다. 당신이 플러그인을 개발하고

jQuery.fn.plugin = function() { 
    this.each(function() {...}); 
} 

이있는 경우 다른 측면에서


는 다음 this은 당신이 메서드를 호출 jQuery 오브젝트를 말합니다.

+0

downvote는 적어도 이유를 설명 할 수 있습니다. 고마워요 :) –

+0

+1 거의 똑같은 생각을 가지고 있습니다 : p – jAndy

1

$ (이) 당신이 jQuery를 기능을 사용할 수 있도록하는 jQuery를 객체로 DOM 개체를 설정합니다.

그래서 $(this)this은 같지 않습니다.

2

this은 전역 범위에서 window을 나타내며 메서드 호출에서 메서드가 호출되는 개체를 나타냅니다.케이스 this에서

아마도 이벤트 (click, hover 등)와 같은 다른기구의 jQuery 또는 요소 (jQuery.each 등)의 목록의 반복으로 인출되는 DOM의 요소를 참조한다. 이 경우 DOM 요소 만 가져 오지만 attr과 같은 jQuery 메서드의 확장이 포함 된 jQuery 객체는 가져 오지 못합니다. 따라서 $ 생성자 함수를 사용하여 jQuery 객체로 변환해야합니다.

1

자바 스크립트에서 키워드 'this이'누구의 맥락 당신이하고있는 객체를 참조합니다. 당신이 방법 항목의 코드 안에 다음, myObj.method1()를 호출하는 경우 그래서, 'this'myObj를 참조합니다.

jQuery에서 대부분의 연산은 종종 jQuery 래퍼라고하는 jQuery 결과 집합 객체를 반환합니다. 예를 들어 선택기 $("a")은 DOM 요소가 모두 <a> 인 jQuery 결과 집합을 반환합니다. $("a").get(0)

그래서 $(this)가 jQuery를 래퍼 객체를 참조 등 $("a").get(1) 번째 앵커 반환, 제 앵커 DOM 요소를 반환하고 this는 DOM 요소를 지칭한다.

그럼 모두 합하면 $(this).get(0)this과 같습니다.

0

this은 항상 현재 함수가 구성원 인 개체를 나타냅니다. 함수가 전역 인 경우 적어도 웹 브라우저에있는 경우 일반적으로 window 개체입니다.

$(this)은 앞서 언급 한 this을 파라미터로 사용하여 호출 된 $() (주 jQuery 함수)입니다. 모든 jQuery 메서드를 제공하는 jquery 객체에 this을 래핑합니다. 이 방법은 this에서만 사용할 수 있습니다.

1

사용하는 컨텍스트에 따라 다릅니다.

$(this)은 jQuery 개체이고 this은 DOM 개체입니다.

그래서 동일하지 않습니다.

jquery 플러그인을 개발중인 경우 this$(this)과 같습니다.

-1

나는 그렇지 않다고 생각합니다.

대신 this.id.replace ("_ button", "")를 사용할 수 있습니다.