2016-09-29 13 views
0

我做了一点多语言的变化,这里是代码jsfiddle
HTML和jQuery:如何将字符串转换为对象的属性,它是一个对象太

var dict = { 
 
\t fr: { 
 
    \t 'hello' : 'Bonjour', 
 
     'bye' : 'Au revoir' 
 
    }, 
 
    \t en: { 
 
    \t 'hello' : 'Hello', 
 
     'bye' : 'Bye' 
 
    } 
 
}; 
 

 
function text (lang){ 
 
\t $('h1').html(dict.lang.hello); 
 
     $('p').html(dict.lang.bye); 
 
}; 
 

 
$('a').click(function(){ 
 
\t var selected = $(this).attr('title'); 
 
     text(selected); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#/" title="fr">fr</a> 
 
<a href="#/" title="en">en</a> 
 
<h1>Bonjour</h1> 
 
<p>Au revoir</p>

什么我想要的是:点击“en”或“fr”来改变“dict”对象中的文本,我存储了标签的“标题”,但是当我把它放到函数“text”作为参数时,控制台显示“TypeError:dict.la ng是未定义的“,据我所知var selected是一个字符串,它不能代替对象中的”fr“和”en“。
所以这里是问题:
如何将字符串转换为对象的属性,它也是一个对象?

+0

没有'lang'上'dict'变量道具! –

+2

使用方括号表示法:'dict [lang] .hello' https://jsfiddle.net/xra81qg6/12/ –

回答

2

使用它作为dict[lang].hellodict[lang].bye

var dict = { 
 
\t fr: { 
 
    \t 'hello' : 'Bonjour', 
 
     'bye' : 'Au revoir' 
 
    }, 
 
    \t en: { 
 
    \t 'hello' : 'Hello', 
 
     'bye' : 'Bye' 
 
    } 
 
}; 
 

 
function text (lang){ 
 
\t $('h1').html(dict[lang].hello); 
 
     $('p').html(dict[lang].bye); 
 
}; 
 

 
$('a').click(function(){ 
 
\t var selected = $(this).attr('title'); 
 
     text(selected); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#/" title="fr">fr</a> 
 
<a href="#/" title="en">en</a> 
 
<h1>Bonjour</h1> 
 
<p>Au revoir</p>

+0

它的工作原理!只是一个语法错误,我陷入了一个复杂的方式。 –

+0

没问题。高兴地帮助:) –

1

,因为有你的dict variabel不lang道具。所以你需要删除它。

here指的是,你可以访问对象的道具作为关联数组。作为例子:array["name"]["nameagain"].id;

所以对于你的情况,你可以通过调用它:dict[lang]来获取对象,或作为dict[lang].bye特定数据。

见下面我摘录:

var dict = { 
 
\t fr: { 
 
    \t 'hello' : 'Bonjour', 
 
     'bye' : 'Au revoir' 
 
    }, 
 
    \t en: { 
 
    \t 'hello' : 'Hello', 
 
     'bye' : 'Bye' 
 
    } 
 
}; 
 

 
function text (lang){ 
 
\t $('h1').html(dict[lang].hello); 
 
     $('p').html(dict[lang].bye); 
 
}; 
 

 
$('a').click(function(){ 
 
\t var selected = $(this).attr('title'); 
 
     text(selected); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#/" title="fr">fr</a> 
 
<a href="#/" title="en">en</a> 
 
<h1>Bonjour</h1> 
 
<p>Au revoir</p>

+0

是的,它的工作原理!只是一个语法错误,我会记住这一点! –