Я пытался переопределить все функции jQuery для выполнения действия при вызове jQuery (для целей аудита или по другим причинам). Однако я, вероятно, нужно, чтобы получить те же параметры, функция получает, чтобы сделать следующий код работы:Переопределить/перехватить все функции jQuery
function __wrapjQuery() {
var wrapper = this;
alert('Wrapping');
var functions = Object.getOwnPropertyNames($.fn).filter(function (p) {
return (typeof($.fn[p]) === 'function');
});
for (var i = 0; i < functions.length; i++) {
wrapper.oldTempjQueryFunction = $.fn[functions[i]];
$.fn[functions[i]] = function() {
var self = this;
self.wrappedFunction = wrapper.oldTempjQueryFunction;
var returnVar = self.wrappedFunction.call(this);
alert('jQuery was called');
return returnVar;
}
}
}
$().ready(self.__wrapjQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myDiv" style="background-color:#FF0000">
ELEMENT
</div>
<button onclick="$('#myDiv').remove()">Remove Element</button>
Однако приведенный ниже код, где я задать функцию для переопределения (remove
), работает (возможно, из-за параметров):
function __wrapjQuery() {
var wrapper = this;
alert('Wrapping');
wrapper.wrappedRemoveFunction = $.fn.remove;
$.fn.remove = function() {
var self = this;
var returnVar = wrapper.wrappedRemoveFunction.call(this);
alert('jQuery was called to remove');
return returnVar;
}
}
$().ready(self.__wrapjQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myDiv" style="background-color:#FF0000">
ELEMENT
</div>
<button onclick="$('#myDiv').remove()">Remove Element</button>
Как заменить все функции (даже с параметрами, такими как each
) и поддерживать jQuery нормально? Предположим, я хочу проверить наиболее используемые методы из jQuery.
Первый очевидный вопрос: почему? Какую проблему ты пытаешься решить? – charlietfl
@charlietfl Предположим, я хочу проверить наиболее используемые методы из jQuery. – ClayKaboom
, так что происходит, когда вы удаляете '&& $ .fn [p] ==" remove "' и пытаетесь использовать '$ .fn.each'? Или когда вы пытаетесь использовать методы цепочки? – charlietfl