我需要將我構建的一個小畫布應用程序合併到一個Sharepoint站點的巨大混亂中,我無法控制任何東西,所有內容。該應用將進入「WebPart」包裝div
。爲了讓我的JS更加美觀和整潔,我想我可以使用一個克隆版本的jQuery,它總是使用我的包裝對象作爲上下文,這樣我就可以確保我永遠不會選擇和改變我的包裝外的任何東西,比如:
var ctxed$ = ctxjQuery('#wrapper-el'); //this is what I don't get
(function($){
$('p').addClass('awesome'); //should only affect elements inside #wrapper-el
})(ctxed$)
無論如何,我試過的東西沒有解決。我嘗試使用$.proxy
,這並沒有像我期望的那樣工作(因爲上下文在這裏是不同的東西......)。
這是我停留在目前的點:
function getContextifiedjQuery(ctx) {
var fn = function() {
return $.call(arguments[0], ctx);
}
$.each($, function (k, v) {
fn[k] = v;
});
return fn;
}
var wrapper$ = getContextifiedjQuery('#wrapper');
wrapper$('p').css('color', 'red');
wrapper$.each([1, 2, 3], function() {
alert(this)
});
它可以作爲一個簡單的測試案例,但是當我嘗試在我的項目中使用它,我得到循環引用,事情出差錯。我在這裏失蹤的是什麼?
感謝澄清,但我也將此到我的情況,我贊成不改變瓶蓋內的代碼? – m90
@ m90更新了我的答案,向您展示瞭如何讓自己的想法奏效,但它會覆蓋其他所有內容。 – epascarello
感謝您的編輯,我現在終於得到您的答案:)發現會沒問題,唯一缺少的將是'$ .each',我可以像我的初始方法那樣複製它(然後迭代$和copy內容)?請參閱:http://jsfiddle.net/SpGv2/2/ – m90