2010-11-27 8 views
0

私はWordPressのテーマを持っており、その中にいくつかのjQueryプラグインを使用しています。問題は、これらのプラグインのいくつかは他のWPプラグインに含まれているため、名前の競合のためにjsが壊れてしまうことです。jQueryの関数の競合

HTMLドキュメントに含まれている残りのスクリプトから何らかの機能や.jsファイルを分離する方法があるのだろうかと思いました。以下のような

何か:それは他のライブラリを殺さないよう

function wrap(){ 

    plugin functions... 
    plugin functions... 

} 

jQuery(document).ready(function($){ 
    wrap.pluginfunction()... 
    wrap.pluginfunction()... 
}); 

答えて

2

これを行う最も簡単な方法は、このようなスクリプト全体をラップすることです。 someNewNamespaceオブジェクトは、この実行後にsomeFunctionなどのメンバーを持ちます。匿名の外部関数内で宣言されているが、thatオブジェクトを介して公開されていない変数は、スクリプトの外部からはアクセスできません。

+0

ありがとう! jQuery(document).ready(function($){});からこれらの関数にアクセスするにはどうすればよいですか? – Alex

+0

'someNewNamespace.someFunction()'など。匿名関数内の 'that'オブジェクトで作成したメンバーは' someNewNamespace'オブジェクトのメンバーになります。 – cdhowie

+0

私は例えば持っている場合。 '$("。menu ")。superfish();' someNewNamespace'をどこに追加しますか? – Alex

1

jQueryがnoConflict()方法があります。

jqueryライブラリをロードした後にjQuery.noConflict();を呼び出すだけで設定する必要があります。これは、効果的にスクリプトの新しい名前空間を作成します

var someNewNamespace = (function() { 
    // Script goes here 

    // If you want to expose functions on the namespace: 
    var that = {}; 

    // Declare a new function to expose: 
    that.someFunction = function() { 
     // ... 
    }; 

    // Expose a function declared previously: 
    that.someOtherFunction = someFunctionDeclaredPreviously; 

    return that; 
}(); 

+0

私の場合、これらは同じライブラリが2回ロードされています。 jQueryが他のJSフレームワークと連携するためには、 'noConflict()'が考えられました。私は安全に同じ機能を持つ2つのスクリプトを実行する方法が必要です:) – Alex

+0

@Alex:その場合私が考えることができる唯一の他のオプションは: 1. iframeを使用して 2.コードの順序を変更する紛争はあなたを気にしません – Wolph