我试图覆盖所有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