这是我的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是从“购物车”页面调用的。您看到的第一种方法是送货方式:在商店取货。实际发货的第二个。我想在我的商店的不同页面加载第二个(实际发货)。所以人们可以看到运费是多少。所有产品都是基于重量,所以当产品重量更大时,运费会改为id为“core | 10292 | 40693”和“core | 10292 | 40718”的方法(参见代码)并且所有价格都不同。所有这些都是动态的,因此json将始终具有拾取方法和实际的运输方法。
我努力实现的目标是 a)缩短代码。例如if(index ==“core | 10292 | 40696”||“core | 10292 | 40693”||“core | 10292 | 40718”)不起作用并打印出拾取方法和实际发货方法。
和b)将输出转换为带有两位小数的货币。我搜索了这个论坛,但我无法解决这个问题。该代码现在打印39.9500而不是39.95
c)我想摆脱$('<span></span>')
,因为代码现在打印了一个范围内的所有内容。我尝试使用$(方法),但这会产生“未定义”错误。显然是因为var methods =
是“空的”并且什么都不做。
有没有人有指示或愿意帮忙?我对JSON和jquery很陌生,所以请耐心等待。
答案 0 :(得分: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)将输出转换为两位小数的货币。
目前您的货币金额是字符串。以下内容使用unary plus operator将price_incl
从字符串更改为数字,然后使用.toFixed()
method将它们四舍五入到小数点后两位:
(+methods.price.price_incl).toFixed(2)
+methods.price.price_incl
周围的括号是因为没有它们,对.toFixed(2)
的方法调用会比一元加号具有更高的运算符优先级。
c)我想摆脱
$('<span></span>')
,因为代码现在打印了所有内容。
您可以像创建跨度一样创建强元素,即通过将一串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);