0

私はjqueryがあまり得意ではありません。関数を機能させるために変数演算子を配置することは可能ですか? 異なるページで使用される jQuery のバージョンが異なるためです。

.on関数は 1.7 で登場しましたが、一部のサイトはそれより古いバージョンで実行されているため、代わりに .click 関数を使用する必要があります。そして、各バージョンのコードの重複を避けたいです。

例えば ​​:

$('#mySelector')(var <= 3.4) ? ".click(function()" : ".on('click', function()");

{
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

ご協力ありがとうございました。

より明確にするために:

これは 1.7 で動作します (ボタンを含む - オプション:

$('.delete_league, .print_league').on('click', function() 
{
        $( "#dialog p" ).append('<span>'+wpslm_v_script_vars.delete_league+'</span>');
            $( "#dialog" ).dialog({ 
                modal: true, 
                buttons: 
                [{
                    text: "OK",
                    click: function() 
                    { 
                        $( "#dialog p span" ).remove();
                        $(this).dialog("close"); 
                    }
                }] 
            });
});

そして、これは1.6で動作します。ボタンオプションをそのままにしておくと、エラーがスローされます。

    $('.delete_league, .print_league').click(function() 
{
    // Just in case there is an old message hanging around
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(wpslm_v_script_vars.delete_league) +'</span>');
    $( "#dialog" ).dialog({ 
        modal: true
    });
});

したがって、両方に同じコードを使用できるように、セレクターライン (およびボタンオプション) 変数を作成したいと考えています。つまり、1.7 よりも古いバージョンを実行していることがわかった場合は、ボタンなしで .click を使用する必要があります。それ以外の場合は、buttons-option を使用して .on を使用します。あまり混乱しないことを願っています。

4

3 に答える 3

1

バージョンごとに重複するコードを避けたい。

jQuery の 2 バージョンと互換性のあるコードを書きたいが、コードを複製したくない場合は、コードがサポートする最も低いバージョンを目指してコードを書くことをお勧めします。

たとえば、最低値が 1.6 の場合は、イベントの添付に使用binddelegate、動的に生成された要素にイベントを添付する必要がある場合に使用します。
( click1.6 では bind とにかく呼び出すので、使用することもできますbind)

個人的には、複数のバージョンをサポートするために単一のメソッドを作成するのは悪い考えであり、保守が難しく、場合によってはデバッグするのが非常識になると思います。

ただし、特定のバージョンの jQuery を対象とする 2 つの別個のコード ファイルを作成する場合は、アプリケーションに応じて、どちらか一方だけを含めることができます。

于 2012-09-22T19:44:23.763 に答える
1

jquery のバージョンを確認する代わりに、関数が存在するかどうかを確認します

if($.fn.on) {

}
于 2012-09-22T19:53:42.843 に答える
0

.clickどちらの場合でも使用してください。clickjQuery 1.7で有効です

または、このようなことができます

var setClick = function (selector,handler) {
      return $.fn.on ?
              function () {
                  $(selector).on('click',handler)
              } 
              : function () {
                   $(selector).click(handler);
              }
}

そして、あなたはそれを次のように使うことができます

setClick("#mySelector",function () {
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

または、jQuery オブジェクトに追加することもできます

$.fn.setClick = function (handler) {
      return this.on ?
              function () {
                  this.on('click',handler)
              } 
              : function () {
                   this.click(handler);
              }
}

そして、以下のように呼び出します

$("#mySelector").setClick(function () {
    $( "#dialog p span" ).remove(); 
    $( "#dialog p" ).append('<span>'+ isEncHTML(html_output) 
});

しかし、すべての場合、最初に .click を使用することで上記のすべてが簡単に達成できたため、何も達成できなくなります。

于 2012-09-22T19:31:17.747 に答える