2014-03-25 1 views
3

는 사실 jQuery's .clone()에 API 호출에서 실수를 :

을 대신 http://jsfiddle.net/AXsB5/17/를 사용하는 (당신이 실행 얻을 .clone()를 만들기 위해 바이올린을 클릭합니다) :

$(".foo").click(function() { 
    var el = $(this).clone(); 

    el.css({ color: "orange" }); 
    $("#bar").append(el); 
}); 

내가 실수 http://jsfiddle.net/AXsB5/18/을 사용 :

$(".foo").click(function() { 
    var el = $.clone(this); 

    $(el).css({ color: "orange" }); 
    $("#bar").append(el); 
}); 

jQuery API docs은 두 번째 경우에는 작동하지 않아야한다고 제안합니다. 왜 두 경우 모두 효과가 있었는지 궁금합니다.

+0

나는 jquery.clone에 대한 설명서가 놓친하지만 라이브러리에 적용된다 생각합니다. 그리고 이것은 $ .data()와 같은 다른 하위 jquery처럼 작동합니다. –

+2

두 번째 사례가 작동하지 않아야한다고 언급 한 곳은 어디입니까? –

+0

@BhushanKawadkar API가 .clone는()는 인수 (들) –

답변

3

내부 메소드처럼 보이지만 사용자에게 노출되지 않습니다 (api 문서가없는 이유).

.clone() 메소드는 내부적으로 사용하므로 모두 같은 $ vs $()에 따르면

jQuery.clone()

clone: function(dataAndEvents, deepDataAndEvents) { 
    dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 
    deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 

    return this.map(function() { 
     return jQuery.clone(this, dataAndEvents, deepDataAndEvents); 
    }); 
} 
+0

jQuery 내부 코드에 다소 익숙하지 않은가? 재귀 적으로 어떻게 보이는지? 클론 '()' 'foo.map foo'는'클론()'메소드에 호출되는 객체이다 '(FN)', 및 함수 ... (2 개) 인수를 사용하며, 리턴'fn' 그 'jQuery.clone()'자체가 ...? 즉 bar.clone()은'jQuery.clone (bar)'와 같은 의미입니까? 모두 2 개 가지 방법 때문에 –

+2

는 @ 動靜 能量가 순환하지 ... 1은 다른 정적 메서드 인 플러그인 방식입니다 .. 그래서 당신이 말하는 답 –

+0

에 첨부 된 링크를 참조'$ ("... ") .clone'와' –

4

.clone() 있습니다

는 지금까지 우리가 봤는데 에서 호출되는 메소드를 jQuery 객체로 처리한다. 예를 들어

:

$("h1").remove();

위와 같이

대부분의 jQuery 방법의 jQuery 개체라고; 이러한 메서드는 $.fn 네임 스페이스 또는 "jQuery 프로토 타입"의 일부로 알려져 있으며 jQuery 개체 메서드로 가장 잘 인식됩니다.

그러나 선택에 영향을주지 않는 방법은이고, 다른 방법은 입니다. 이 메소드는 jQuery 네임 스페이스의 일부라고 말 해지고 핵심 jQuery 메소드로 가장 잘 생각된다.

이 구분은 새로운 jQuery 사용자에게 엄청난 혼란을 줄 수 있습니다. jQuery를 선택 호출

  • 방법은 $.fn 네임 스페이스에 있으며, 자동으로 수신하고 this로 선택을 반환 : 다음은 기억해야 할 것입니다.

  • $ namespace의 메소드는 일반적으로 유틸리티 유형의 메소드이며 선택 항목과 함께 작동하지 않습니다. 그들은 자동으로 인수를 전달하지 않으며 반환 값은 다양합니다.

그러나, 디버거를 사용하여 JSFiddle 통해 실행, 결코 심지어 $.fn 네임 스페이스에 clone() 방법에 도착하지있어 실제로 $().clone()을 치는 것 같다. 이것은 위의 링크 된 소스 코드에서 Arun P Johny처럼 을 $.clone() (jquery 파일로드시 실행 됨) 내에 매핑했기 때문일 수 있습니다. 나는 그것이 의미가 있기를 바랍니다 ...내 충고는 디버거를 사용하여 직접 실행하는 것입니다.

관련 문제