2011-09-12 26 views
0

我试图在不使用eval()的情况下执行下面的操作,因为很多帖子都说这是缓慢而邪恶的,所以您不应该使用它,因为总会有其他方法。将JavaScript字符串转换为不使用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

的可能重复[如何使用动态密钥来访问对象?(http://stackoverflow.com/questions/6921803/javascript-how-to-access-json -object-using-dynamic-key) –

回答

4

你试图写

alert(json[myVar].thumb); 

索引符号可用于在运行时检索由名称的属性。

+0

不错,谢谢Slaks。 正在尝试,但有一个额外的排序。 \t alert(json。[myVar] .thumb); – Ben

1

这应该工作,我相信:alert(json[myVar].thumb);

+0

是的,谢谢你 – Ben

相关问题