如何将字符串转换为对象的属性,它也是一个对象

时间:2016-09-29 08:33:32

标签: javascript jquery html

我正在进行一些多语言更改,这里是代码jsfiddle
html和jQuery:

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

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

$('a').click(function (){
	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”对象中的文字,我存储了<a>标签的“标题”,但当我把它放到函数中时“text”作为参数,控制台显示“TypeError:dict.lang未定义”,我理解var selected是一个字符串,它不能代替“fr”和对象中的“en” 所以这是一个问题:
如何将字符串转换为对象的属性,它也是一个对象?

2 个答案:

答案 0 :(得分:2)

将其用作dict[lang].hellodict[lang].bye

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

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

$('a').click(function (){
	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>

答案 1 :(得分:1)

因为lang变量上没有dict道具。所以你需要删除它。

here引用,您可以访问对象的道具作为关联数组。例如:array["name"]["nameagain"].id;

因此,对于您的情况,您可以使用:dict[lang]来获取对象,或dict[lang].bye作为特定数据。

请参阅下面的我的代码:

&#13;
&#13;
var dict = {
	fr: {
  	'hello' : 'Bonjour',
        'bye' : 'Au revoir'
  },
 	en: {
  	'hello' : 'Hello',
        'bye' : 'Bye'
  }
};

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

$('a').click(function (){
	var selected = $(this).attr('title');
        text(selected);
});
&#13;
<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>
&#13;
&#13;
&#13;