如何通过在JS中连接两个字符串来动态地形成变量名,以形成我的Google Map Marker变量的名称



我的网页中包含一个<script type="text/javascript">。这个脚本为我的谷歌地图定义了Markers。此页面中包含的另一个脚本是从另一个.js文件中引用的。我需要在单独的JS文件中编写的第二个脚本中,根据某些条件动态更改标记的图标。

实际上,在第一页中,我使用PHP从数据库表中读取数据。然后使用这些数据编写类似的PHP语句

echo '<script>';
echo 'function initMap() {';
//.... code code
echo 'var marker'. $recordIdFromDb .' = new google.maps.Marker({position:{lat: '.$recordData["lat"].', lng: '.$recordData["lng"].'}, map:map, icon: greenIcon});';

假设上面PHP代码中的最后一条语句打印到网页中:

var markerXYZ123 = new google.maps.Marker({position:{lat:123, lng:456}, map:map, icon: greenIcon})

现在,在第二个脚本中,我正在进行一些处理,因此,我首先更新数据库表记录中的一些字段,该表是上述第一个脚本中数据的来源。

然后,在第二个脚本中,我从同一个数据表中提取数据。然后,根据某些条件,我必须更改标记的图标。为此,我将不得不使用类似的声明

markerXYZ123.setIcon(blah blah);

如上所述,标记名称的XYZ123后缀实际上是数据库中该记录的id在第二个脚本中,我有这个id。我需要动态地形成标记变量的名称。类似

("marker" + "XYZ123").setIcon(blah blah);

我该怎么做?如何在Javascript中动态地形成这个变量名?

使用由id索引的对象,而不是动态变量名。例如,在您的第一个脚本中:

const markers = {};
markers[<?= $recordIdFromDb; ?>] = new google.maps.Marker({
position: {
lat: <?= $recordData["lat"] ?>,
lng: <?= $recordData["lng"] ?>,
},
map,
icon: greenIcon,
});

然后在另一个脚本中,只需再次使用recordIdFromDb来访问markers对象中的适当密钥:

markers["XYZ123"].setIcon(...

相关内容

  • 没有找到相关文章