2013-10-29 3 views
1

내가 이런 좋은 jQuery를 체인이 있습니다일반 함수 jQuery 메서드를 실행 하시겠습니까?

$(...) 
    .method1() 
    .method2() 
    .method3() 
    ...; 

지금 내가 실행하는 조건 .method2()을 대체하고자 참조하거나 .method2a() 또는 .method2b(p1). 실제로, 나는 이것을하고 싶다 :

$(...) 
    .method1(); 

if (cond) 
    $(...).method2a() 
else 
    $(...).method2b(p1) 

$(...) 
    .method3() 
    ...; 

그러나 이것은 아름다운 체인을 깨뜨린다!

그래서 체인에서 내 자신의 기능을 실행할 수있게 해주는 jQuery API 메소드 XYZ를 찾고 있습니다! 그래서 다음과 같이 보일 것입니다 :

$(...) 
    .method1() 
    .XYZ(function() { 
     if (cond) 
      this.method2a() 
     else 
      this.method2b(p1); 
    }) 
    .method3() 
    ...; 

그래서, 이것을 허용 할 수있는 jQuery 메서드 XYZ가 있습니까? 이것에 가장 가까운 것은 .each이지만 각 요소에 대해 개별적으로 실행하고 싶지 않습니다!

답변

1

내가 인식하지 오전이 위해에 내장, 그러나 이것은 매우 간단한 플러그인입니다 :

(function() { 

    $.fn.XYZ = function(fn) { 
     fn.call(this); 
     return this; 
    }; 

}()); 
+0

+1 감사하지만 나는이 :-)에 대한 플러그인을 만들 싫어 나는 질문에서 스케치 한 원시적 인 해결책을 찾아 갈 것입니다. – TMS

5

, 난 정말 내가 당신에게 말할거야 무엇을 싫어하고 나는 그것이 추한 생각하지만, 당신은이를 사용할 수 있습니다

$(...) 
.method1() 
[cond ? 'method2a' : 'method2b']() 
.method3(); 

두 번째 솔루션 :

이 파일에이 코드를 추가

,
(function($){ 
    if(!$.fn.if) 
     $.fn.if = function(cond, trueFn, falseFn){ 
      if(cond) 
       trueFn.call(this); 
      else 
       falseFn.call(this); 

      return this 
     } 
})(jQuery) 

편집 해 :이처럼 사용할 수있는 기능 .if() 당신에게 대한 액세스를 제공합니다

포맷 :

$('body').if(cond, 
     function(){ 
      this.addClass('a') 
     }, 
     function(){ 
      this.addClass('b') 
     }) 
+1

와우, 색인 연산자 안에 삼원 항법. 나는 그런 생각을하지 못했다. 그것은 위엄이 있지만 꽤 똑똑합니다. –

+1

이것은 완벽합니다 !! 나는'.xy'가 매개 변수화 할 수있는'[ 'xy']'에 대한 지름길이라는 사실을 완전히 잊었다! 이거 너무 좋아!! 추신 : 왜 너희들이 그것을 싫어하는지 이해가 안 돼,이 깨끗하고 정확한 해결책이다 :) – TMS

+0

아야! 내 경우에는 작동하지 않습니다! 왜냐하면'method2a'와'method2b'는 다른 매개 변수를 취하기 때문입니다! 얼마나 불쌍한가! – TMS

관련 문제