在我的地盤我有使用jQuery.fn方法,像這樣創造了一個jQuery函數:jquery.fn覆蓋掉
jQuery.fn.equalHeights = function() {
var currentTallest = 0;
jQuery(this).each(function(){
if (jQuery(this).height() > currentTallest) {
currentTallest = jQuery(this).height();
}
});
jQuery(this).css('min-height', currentTallest);
};
我用這個功能來平衡側邊欄的大小在我的網站,所以我打電話在頁面完成加載之後,確保在進行大小調整之前一切都已到位。
jQuery(window).load(function(){
jQuery('#sidebar-one, #sidebar-two, #content').equalHeights();
});
這完美的作品,除了一些我的網頁的用戶就會在體內區域jQuery庫的另一個實例添加到自己的網頁(無論何種原因)。這第二個庫導致我的功能停止正常工作。我假設這是因爲第二個jQuery覆蓋了使用jQuery.fn方法創建的所有函數。有什麼辦法可以防止這種情況發生?
筆記:我的網站運行Drupal 7,所以我不能輕鬆地將腳本移動到頁面的底部。平等高度函數不是由我寫的;我相信我在堆棧中找到它,所以我對fn方法(和JS一般)的知識並不是那麼廣泛。
編輯:基於以下所有偉大的建議,這是怎麼了,我終於得到它的工作。
首先,我給jQuery的我的「默認」實例的新變量來引用:
var JQ = jQuery.noConflict();
其次,我把使用新的jQuery變量的equalHeights功能的更有效的版本:
JQ.fn.equalHeights = function() {
var tallest = 0;
return this.each(function(){
var h = JQ(this).height();
tallest = h > tallest ? h : tallest;
}).css("minHeight", tallest);
};
第三,我呼籲採用新的jQuery可變我的功能:
JQ('#sidebar-one, #sidebar-two, #content').equalHeights();
所以現在任何時候我需要引用我原來的jQuery庫我只是使用JQ,我不必擔心另一個庫在我的任何函數上步進。
我意識到這不是解決這個問題的最好方法,而且我將努力消除額外的jQuery庫,但這至少會讓我的邊欄在適當的時候保持適當的大小。
注意:有沒有必要換'this'插件內,您需要將'.each'循環內 - 只是做'return this.each(...).css(...)' – Alnitak
我一直試圖將它從插件中取出,但沒有成功。我會嘗試你的'返回this.each()',看看它是如何工作的。 – Cloudkiller
我只是在說一個插件。無論如何,你可能需要'$ .noconflict()'給自己一個持久的引用,以保證jQuery的主副本不會被後面的副本覆蓋。 – Alnitak