我遇到了同样的问题,希望Google最终能提供一种官方的清理方法,但目前我能够通过手动删除pac-container对象来解决问题,可以在从Autocomplete类返回的引用中找到。
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()
希望这能帮助到你。
更新
我不确定谷歌的混淆是如何工作的,但上面的部分似乎已被混淆,如果混淆或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能尽快解决这个问题。