如何使用setAttribute更新对象中的一个值?

时间:2016-04-12 08:54:47

标签: javascript aframe

我有一个包含名为“sound”的属性的元素。此声音属性的值是一个对象。此对象中的一个属性是“volume”。

换句话说:

<a-entity position='0 0 0' sound='src: url; on: click; volume: 2.0;'></a-entity>

所以就是这样:

{
  position: '0 0 0',
  sound: {
    src: 'url',
    on: 'click',
    volume: '2.0'
  }
}

我正在使用setAttribute来更新volume属性,但我不知道是否有一种有效的方法来只定位一个属性而不更改对象中的其他属性。

基本上这会替换声音对象并删除所有未指定的属性(src AND属性被删除):

element.setAttribute('sound', {
  volume: '4'
});

我不想替换整个对象。我只想为一个属性替换一个值。有没有最好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用此处文档中的3参数版本的setAttribute:https://aframe.io/docs/core/entity.html#Updating-Multi-Property-Component-Data

具体来说,您可以执行以下操作:

element.setAttribute("sound", "volume", "4");

答案 1 :(得分:-1)

您可以获取与该属性对应的对象,并仅替换您需要的属性。

这样的事情:

var data = element.getAttribute('sound');
data.volume = '4';
element.setAttribute('sound', data);

修改

如果您将html中的数据设置为真正的JS对象,则可以执行以下操作:

var newData = JSON.parse(element.getAttribute('sound'));
newData.volume = 4;
element.setAttribute('sound', JSON.stringify(newData));

这是fiddle