您好亲爱的Stackoverflowers!
像许多其他InfoWindow线程一样,我正在寻找一种自定义InfoWindow的方法。注意:出于技术原因,我不能简单地使用infobubble和infobox!
通过本指南,我遇到了一个比较僵硬的解决方案:
http://en.marnoto.com/2014/09/5-formas-de-personalizar-infowindow.html(希望链接永不消失,您可以从demobutton旁边的download按钮下载示例)
它的作用是“删除”信息窗口内容的外部内容,这是我想要的。但这远不止于此,每当我单击标记并弹出信息窗口时,它都会为地图上的所有其他INFOWINDOWS设置相同的样式。
function customizeInfoWindow(infowindow) {
google.maps.event.addListener(infowindow, 'domready', function () {
var iwOuter = $('.gm-style-iw');
var iwBackground = iwOuter.prev();
iwBackground.children(':nth-child(2)').css({ 'display': 'none' }); // Removes BoxShadow
iwBackground.children(':nth-child(4)').css({ 'display': 'none' }); // Removes WhiteBox
});
}
鉴于此,据我所知,这是从InfoWindow中删除外部内容的唯一真正选择。恩,我选择了这个选项。通过自定义,我得到了想要的东西,但是此“修复”伴随了一些不需要的功能。
现在,当我关闭信息窗口(单击地图上的其他位置)时,我正在尝试通过还原样式来解决此问题。我正在尝试这样的事情:
function undoCustomization(map) {
google.maps.event.addListener(map, 'domready', function () {
var iwOuter = $('.gm-style-iw');
var iwBackground = iwOuter.prev();
iwBackground.children(':nth-child(2)').css({ 'display': 'block' }); // Add BoxShadow
iwBackground.children(':nth-child(4)').css({ 'display': 'block' }); // Add WhiteBox
});
}
但这确实可行。有人对我如何从这里前进有一些建议?
最佳答案
我强烈建议您不要对Infowindow本身的DOM结构做任何假设。该API不保证Infowindow的组成方式,并且类名称,元素层次结构和CSS样式之类的内容随时可能更改。如果您走这条路,您的解决方案很可能在将来的某个时候停止工作而不会发出警告。
如果您想体验Infowindow的外观,那么自定义infowindow实现是一个更好的主意。有关从何处开始的一些想法,请参见Google Maps: How to create a custom InfoWindow?。
关于jquery - Google Maps InfoWindow,使用jQuery取消子元素的样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30442144/