1

これは私のJSONファイルです

"shipping":{
    "countries":{
        "150":{
            "id":150,
            "code":"nl",
            "title":"Nederland"
        }
    },
    "country":150,
    "zipcode":null,
    "methods":{
        "core|13490|40699":{
            "id":"core|13490|40699",
            "title":"ophalen",
            "description":"ophalen",
            "content":false,
            "pickup":true,
            "cod":false,
            "price":{
                "price_excl":"0.0000",
                "price_incl":"0.0000"
            }
    },
    "core|10292|40718":{
        "id":"core|10292|40718",
        "title":"Pakketdienst",
        "description":"Pakketdienst",
        "content":false,
        "pickup":false,
        "cod":false,
        "price":{
        "price_excl":"33.5714",
        "price_incl":"39.9500"}
        }
    }
}

私のスクリプトは次のようになります。

function bakVormShipping(targetClass){
    $.getJSON('http://shop.com/cart/?format=json', function(data){
        var methods = ''
        $.each(data.cart.shipping.methods, function(index, methods){
            if (index == "core|10292|40696") {
                $('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
            }
            else if (index == "core|10292|40693") {
                $('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
            }
            else if (index == "core|10292|40718") {
                $('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
            }
        });
    });
}

最初に少し説明します。表示されるjsonは、「カート」ページから呼び出されます。最初に表示される方法は、配送方法です。店舗で受け取ります。実際の出荷の2番目。2つ目(実際の発送)をショップの別のページにロードしたいと思います。だから人々は送料が何であるかを見ることができます。すべての商品は重量に基づいているため、商品の重量が増えると、送料はID「core | 10292|40693」と「core|10292 | 40718」(コードを参照)のメソッドに変更され、コース外の価格がすべて異なります。 。すべて動的であるため、jsonには常に集荷方法と実際の配送方法があります。

私が達成しようとしているのは、a)コードを短くすることです。たとえば、(index == "core | 10292 | 40696" || "core | 10292 | 40693" || "core | 10292 | 40718")が機能せず、集荷方法と実際の配送方法の両方を出力する場合。

b)出力を小数点以下2桁の通貨に変換します。このフォーラムを検索しましたが、このコードで機能させることができません。コードは39.95ではなく39.9500を出力するようになりました

$('<span></span>')c)コードがスパン内のすべてを出力するようになったため、削除したい。$(methods)を使用してみましたが、「未定義」のエラーが発生します。明らかにvar methods =「空」で何もしないからです。

誰かがいくつかの方向性を持っているか、助けてくれる人はいますか?私はJSONとjqueryにかなり慣れていないので、我慢してください。

4

1 に答える 1

3

a)if (index == "core|10292|40696" || "core|10292|40693" || "core|10292|40718")機能しない

indexこれらの値のいずれかに等しい場合に何かを行うには、これを行う必要があります。

if (index == "core|10292|40696" || index == "core|10292|40693"
    || index == "core|10292|40718")

b)出力を小数点以下2桁の通貨に変換します。

現在、通貨の金額は文字列です。以下では、単項プラス演算子price_inclを使用して文字列から数値に変更し、.toFixed()メソッドを使用して小数点以下2桁に四捨五入します。

(+methods.price.price_incl).toFixed(2)

括弧+methods.price.price_inclがない場合、へのメソッド呼び出し.toFixed(2)は単項プラスよりも演算子の優先順位が高くなるため、括弧はそこにあります。

$('<span></span>')c)コードがスパン内のすべてを出力するようになったため、削除したい。

スパンを作成したのと同じ方法で強力な要素を作成できます。つまり、htmlの文字列を$()関数に渡す(そして、結果をtargetClassすでに行っているように追加する)ことができます。

$('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);

// OR, possibly easier to read but definitely more compact:
$('<strong/>').html(methods.price.price_incl).appendTo(targetClass);

// OR with the rounding included:
$('<strong/>').html((+methods.price.price_incl).toFixed(2)).appendTo(targetClass);
于 2012-05-29T00:58:41.683 に答える