2011-03-16 8 views
3

jQuery.find를 재정 의하여 추가 기능을 무시하고 싶습니다. 내가 그렇게 (http://www.bennadel.com/blog/1624-Ask-Ben-Overriding-Core-jQuery-Methods.htm를) 할 수있는 벤 나델의 블로그에서 논의 된 아이디어를 사용했지만 어떤 이유가 $ .find() 작동하지 않습니다, 이것은 당신이 잘못 어떤 생각을해야합니까 내 코드여분의 기능을 제공하기 위해 jQuery.find() 함수를 재정의하십시오.

 (function() { 
     // Store a reference to the original remove method. 
     var originalFindFunction = jQuery.find; 

     // Define overriding method. 
     jQuery.find = function() { 
      // Log that we are calling the overridden function. 
      Console.log("------> Find method called"); 

      // then execute the original method 
      var results = originalFindFunction.apply(this, arguments); 
      return results; 
     }; 
    })(); 

입니다 , 또는 jquery 함수를 어떻게 오버라이드 할 수 있습니까?

답변

1

참조의 시위는 다른 의미를 가지고 .fn.

jQuery.fn.remove 

에서 함수를 사용하여 this입니다. .fn.에서 작업 할 때 이것은 반환 된 쿼리 결과이며 모든 쿼리 결과에 "혼합"됩니다.

여기에서 this은 루트 개체 자체가되며 사용 방법이 다릅니다. 이들은 "정적으로"호출되는 함수 또는 유틸리티 함수입니다.

+0

대신 jquery.fn을 덮어 쓰면 문제가 해결됩니다. 추가 설명 주셔서 감사합니다. – kabaros

+0

나는 당신이하려고하는 것에 대해 확신하지 못했습니다. 그래서 나는 대안들과 그들의 의미를 모두 밝혀 내려고 노력했습니다. :) –

1

jQuery.fn.find이 아닌 jQuery.find으로 재정의/후킹을 찾고 있습니다. 이 수준에

jQuery.find 

재정의 기능에 기능을 무시하고 어디


(function() { 
    // Store a reference to the original remove method. 
    var originalFindFunction = jQuery.fn.find; 

    // Define overriding method. 
    jQuery.fn.find = function() { 
     // Log that we are calling the overridden function. 
     Console.log("------> Find method called"); 

     // then execute the original method 
     var results = originalFindFunction.apply(this, arguments); 
     return results; 
    }; 
})(); 
0

코드에 실제로 오류가 표시되지 않습니다. 예제에서 jQuery 프로토 타입 ("fn")을 사용하는 것은 사실이지만 $ .find도 조작 할 수 있습니다. 기본적으로 다음 예제에서 제공 한 동일한 코드를 복사했습니다.

var oldFind = $.find; 

$.find = function() { 
    console.log("something new."); 

    console.log(oldFind.apply(this, arguments)); 
}; 

$.find("div"); 

실현, 특정 방식으로 실행 중일 수 있습니다. 당신의 위가 :

(function() {...})(); 

이 첫 번째 괄호 안에 코드를 만들고, 자기 실행 (내가 여기 틀렸다면 정정 해줘), 의도가 원하는 않았을 수 있습니다 당신은이 기능을 외부에 포함 된 코드를 호출하는 경우 . 위 스 니펫의 실제 예는 다음과 같습니다. http://jsfiddle.net/nuPLV/

관련 문제