我遇到了同样的问题,希望 Google 最终能提供一种官方的清理方法,但现在我能够通过手动删除 pac-container 对象来解决问题,可以在自动完成中找到该对象的引用返回的类:
var autocomplete = new google.maps.places.Autocomplete(element, options);
可以在以下位置找到对 pac-container 元素的引用:
autocomplete.gm_accessors_.place.Mc.gm_accessors_.input.Mc.L
我只是在我的小部件析构函数中从 DOM 中删除了它:
$(autocomplete.gm_accessors_.place.Mc.gm_accessors_.input.Mc.L).remove();
希望这会有所帮助。
更新
我不确定 Google 的混淆是如何工作的,但上面的部分内容似乎被混淆了,如果混淆或 API 的内部结构发生变化,显然会失败。不能对后者做太多,但对于前者,您至少可以按预期标准搜索对象属性。正如我们所看到的,有些属性名称没有被混淆,而有些似乎是,例如“Mc”和“L”。为了使它更健壮一点,我编写了以下代码:
var obj = autocomplete.gm_accessors_.place;
$.each(Object.keys(obj), function(i, key) {
if(typeof(obj[key]) == "object" && obj[key].hasOwnProperty("gm_accessors_")) {
obj = obj[key].gm_accessors_.input[key];
return false;
}
});
$.each(Object.keys(obj), function(i, key) {
if($(obj[key]).hasClass("pac-container")) {
obj = obj[key];
return false;
}
});
$(obj).remove();
代码期望一般结构保持不变,而不依赖于(可能)混淆的名称“Mc”和“L”。我知道很丑,但希望 Google 能尽快解决这个问题。