我变得非常沮丧,我希望有人可以提供帮助。我有一个地图应用程序,地图上有几个标记,其中infoWindows的内容定期更新。我的解决方案是将进入DOM中infoWindow的div放在一个隐藏容器中,该容器可以在后台通过我的更新程序代码进行更新。然后我使用单个infoWindow,并使用query:
将内容设置为DOM元素google.maps.event.addListener(marker, 'click', function(){
infoWindow.setContent($(#"+id+"-window-content)[0]);
infoWindow.open(map, marker);
}
事情很有效......曾经。然后它不会再为该制造商打开。我注意到如果我在一个标记(标记A)上打开窗口,然后关闭它,然后在另一个制造商(标记B)上打开它,然后返回标记A,窗口将出现在标记A旁边,但有Marker B的内容。
为什么我的脚本不会再次将内容设置为DOM元素......这几乎就像使用jQuery选择器从DOM中删除元素一样。
干杯,
whiteatom
再次问好,
当我试图在这里解释时,我可能已回答了我自己的问题。
将DOM元素传递给setContent()函数似乎实际上将它从DOM中删除并将其放在infoWindow中,所以下次我尝试抓住它时,它就不再存在了。我的修复是在jQuery调用中添加一个clone(),它现在似乎正常工作。
google.maps.event.addListener(marker, 'click', function(){
infoWindow.setContent($(#"+id+"-window-content).clone()[0]);
infoWindow.open(map, marker);
}
任何人都可以确认这是将DOM元素传递给它时setContent的行为吗?这是解决这个问题的最佳方法吗?
干杯,
whiteatom
答案 0 :(得分:6)
当您更改DOM中元素的父元素时,元素将被移动,而不是复制。
所以我会假设这一行...
infoWindow.setContent($(#"+id+"-window-content)[0]);
将从原来的位置删除元素“#id-window-content”。
当infoWindow关闭时,其中的DOM元素将被丢弃。
因此,当您再次单击标记时,该元素将不再存在。
尝试克隆元素或向infoWindow提供HTML字符串。
希望这有帮助
答案 1 :(得分:2)
它实际上变得更复杂,因为我在infoWindows中有标签(使用jQuery Tools)和一个克隆(即使是事件和数据的深层副本 - 克隆(true,true))似乎不想将它们带过来......标签在infoWindow中已经死了。
所以..我正在移动div,就像我原来一样,然后在添加新的infoWindow内容之前将其移回:
google.maps.event.addListener(marker, 'click', function(){
infoWindow.close();
if(typeof infoWindow.content == "object")
$("#info-window-container").append(infoWindow.getContent());
infoWindow.setContent($(#"+id+"-window-content)[0]);
infoWindow.open(map, marker);
}
我认为这也有一个好处,就是允许我的更新程序脚本只更新#“+ id +” - window-content div,它甚至会在打开时更新infoWindow:)
感谢您的帮助......