使用jQuery作为DOM元素的Google Maps infowindow.setContent似乎只能运行一次?

whi*_*tom 8 google-maps google-maps-api-3

我变得非常沮丧,我希望有人可以提供帮助.我有一个地图应用程序,地图上有几个标记,其中infoWindows的内容定期更新.我的解决方案是将进入DOM中infoWindow的div放在一个隐藏容器中,该容器可以在后台由我的更新程序代码更新.然后我使用单个infoWindow并使用查询将内容设置为DOM元素:

google.maps.event.addListener(marker, 'click', function(){
     infoWindow.setContent($(#"+id+"-window-content)[0]);
     infoWindow.open(map, marker);
}
Run Code Online (Sandbox Code Playgroud)

事情很有效......一次.然后它不会再为该制造商打开.我注意到如果我在一个标记(标记A)上打开窗口,然后关闭它,然后在另一个制造商(标记B)上打开它,然后返回标记A,窗口将出现在标记A旁边,但有Marker B的内容.

为什么我的脚本不会再次将内容设置为DOM元素......这几乎就像使用jQuery选择器从DOM中删除元素一样.

干杯,

whiteatom


再次问好,

当我试图在这里解释时,我可能已经回答了我自己的问题.

将DOM元素传递给setContent()函数似乎实际上将它从DOM中删除并将其放在infoWindow中,所以下次我尝试抓住它时,它就不再存在了.我的修复是将一个clone()添加到jQuery调用,它现在似乎工作.

google.maps.event.addListener(marker, 'click', function(){
     infoWindow.setContent($(#"+id+"-window-content).clone()[0]);
     infoWindow.open(map, marker);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以确认这是传递DOM元素时setContent的行为吗?这是处理这个的最好方法吗?

干杯,

whiteatom

Mik*_*ier 6

在DOM中更改元素的父元素时,元素将被移动,而不是复制.

所以我会假设这一行......

infoWindow.setContent($(#"+id+"-window-content)[0]);
Run Code Online (Sandbox Code Playgroud)

将从其原始位置删除元素"#id-window-content".

当infoWindow关闭时,其中的DOM元素将被丢弃.

因此,当您再次单击标记时,该元素将不再存在.

尝试克隆元素或向infoWindow提供HTML字符串.

希望这可以帮助