我試圖覆蓋所有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