0

body クラスの特定のクラスに基づいて json 呼び出しを実行しています。さまざまなページでの不要な呼び出しを減らすのに役立ちます。

元:

$(function () {
    if ($('body.CLASSNAME1').length == 1) {
        //JSON call
    });
});

$(function () {
    if ($('body.CLASSNAME2').length == 1) {
        //A Different JSON call
    });
});

これをきれいにするために、1 つの関数を作成し、指定されたクラス名に基づいて内部関数を実行したいと思います。私はスイッチステートメントを考えていますが、ロジックに頭を悩ませることはできません。始めまし$.hasClass('')たが、一意のクラス名に基づいて読み取りおよび実行する他の方法を理解できません。

4

6 に答える 6

2

さまざまな XHR 呼び出しを呼び出す関数にクラス名をマッピングするオブジェクトを作成し、オブジェクトを列挙し、各クラス名をテストし、bodyそのクラスがあれば関数を呼び出します。

 $(function(){
    // Map your keys (class names) to your JSON calls
    var classes = {
        CLASSNAME1: function() {
                        // JSON call
                    }
        CLASSNAME2: function() {
                        // A Different JSON call
                    }
    };

    // enumerate the object, calling the related function for each found class
    $.each(classes, function(key, func) {
        if ($("body").hasClass(key))
            func();
    })
 });

または$.proxy、追加のロジックが必要ない場合は、単純に XHR パラメーターをバインドするために使用できます。

    var classes = {
        CLASSNAME1: $.proxy($, "ajax", {...parameters...})
        CLASSNAME2: $.proxy($, "ajax", {...parameters...})
    };
于 2013-05-20T20:16:58.597 に答える
0

多分これはあなたが望むものですか?

$(function () { 
   var classes = $('body').attr('class').split(' ');
   $.each(classes, function(i){
       var class = classes[i];
       switch class{
          //switch logic to execute function
       }
    });
  });
于 2013-05-20T20:17:40.173 に答える
0

さて、これは少し宣言的ですが、これが私のショットです:

var callbacks = {
    classone: function() {
        //TODO
    },
    classtwo: function() {
    }
}
var bod = ${'body');
for (var cls in callbacks) {
    // 'hasOwnProperty' is just a safety check for object iteration
    if (callbacks.hasOwnProperty(cls) && bod.hasClass(cls) {
         callbacks[cls]();
    }
}

squint の例はかなり似ています。

于 2013-05-20T20:20:52.647 に答える