我正在尝试在不使用eval()的情况下执行以下操作,因为很多帖子都说它很慢而且很邪恶所以你不应该使用它,因为总会有其它方式。
JS(注意我正在使用jquery)
$('a').click(function() {
//Assign myVar to the id value of the a tag
var myVar = $(this).attr('id');
$.getJSON("assets/js/json.js", function(json) {
alert("json."+myVar+".thumb");
});
});
我有一些基本的html,传递myVar的值
<a id="imageID1" href="#">A link 1</a><br />
<a id="imageID2" href="#">A link 2</a>
基本JSON文件
{
"imageID1" : {
"thumb" : "assets/images/312px.png",
"zoomThumb" : "assets/images/gallery/_AR_0063_m_thumb.jpg",
"large" : "assets/images/gallery/_AR_0063.jpg"
},
"imageID2" : {
"thumb" : "another.png",
"zoomThumb" : "assets/images/gallery/_anotherb.jpg",
"large" : "assets/images/gallery/another.jpg"
}
}
因此,每个链接的ID都会在点击时传递给myVar,这样可以正常工作,但警报值不正确。
例如,如果单击imageID2,警报应该实际显示“another.png”,而是显示我实际想要运行的代码,“json.imageID @ .thumb”。
现在我可以将提示行更改为
alert(eval("json."+myVar+".thumb"));
这就是诀窍,但如上所述,由于已知的问题,不想使用eval。
所以任何替代方法都可以做到。 提前感谢任何帮助或提示。
本
答案 0 :(得分:4)
你正在尝试写
alert(json[myVar].thumb);
Indexer表示法可用于在运行时按名称检索属性。
答案 1 :(得分:1)
这应该有用,我相信:alert(json[myVar].thumb);