XML 生成的 Google 地图上的复选框过滤器
Checkbox Filters on XML Generated Google Map
我很难尝试为以下代码设置复选框过滤器,因为整个代码量很大,所以减少了。一切正常,除了这些复选框过滤器。标记都是从 php 生成的 xml 文件中提取的,就像在 Google 的示例中一样。
我认为这是因为标记文件是一个 object HTMLCollection 而我得到的 markers[i].setVisible 不是a function 我已经尝试了很多东西,但它超出了我的知识范围。对于我的最后一步,我真的很感激能得到一些帮助。
示例XML数据
<marker name="Some Shop" id="2" type="shops" description="Great shop" street_number="350" street_name="Main Road" suburb="Lovely ville" lat="-23.9544011" lng="156.1895873" from="2014-01-01 01:00:00" to="2015-10-01 01:00:00"/>
Javascript
downloadUrl("xml_generator.php", function (data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var type = markers[i].getAttribute("type");
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoBox(marker, map, ib, myOptions);
}
$(document).ready(function(){
// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
window.alert("Show " + category + markers);
for (var i=0; i<markers.length; i++) {
if (markers[i].getAttribute("type") == category) {
markers[i].setVisible(true);
}
}
}
// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category) {
window.alert("Hide " + category);
for (var i=0; i<markers.length; i++) {
if (markers[i].getAttribute("type") == category) {
markers[i].setVisible(true);
}
}
}
$(".toggle").click(function(){
var cat = $(this).attr("value");
// If checked
if ($(this).is(":checked"))
{
show(cat);
} else
{
hide(cat);
}
});
});
});
然后 HTML 复选框
<input value="shops" class="toggle" type="checkbox" checked="yes">
markers[i]
是一个 HTMLElement 对象(或 XMLElement)。它没有 setVisible 方法。
您想要一个不同的 "gmarkers" google.maps.Marker 对象数组,如下所示:
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var type = markers[i].getAttribute("type");
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoBox(marker, map, ib, myOptions);
gmarkers.push(marker); //*****
}
我很难尝试为以下代码设置复选框过滤器,因为整个代码量很大,所以减少了。一切正常,除了这些复选框过滤器。标记都是从 php 生成的 xml 文件中提取的,就像在 Google 的示例中一样。
我认为这是因为标记文件是一个 object HTMLCollection 而我得到的 markers[i].setVisible 不是a function 我已经尝试了很多东西,但它超出了我的知识范围。对于我的最后一步,我真的很感激能得到一些帮助。
示例XML数据
<marker name="Some Shop" id="2" type="shops" description="Great shop" street_number="350" street_name="Main Road" suburb="Lovely ville" lat="-23.9544011" lng="156.1895873" from="2014-01-01 01:00:00" to="2015-10-01 01:00:00"/>
Javascript
downloadUrl("xml_generator.php", function (data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var type = markers[i].getAttribute("type");
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoBox(marker, map, ib, myOptions);
}
$(document).ready(function(){
// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
window.alert("Show " + category + markers);
for (var i=0; i<markers.length; i++) {
if (markers[i].getAttribute("type") == category) {
markers[i].setVisible(true);
}
}
}
// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category) {
window.alert("Hide " + category);
for (var i=0; i<markers.length; i++) {
if (markers[i].getAttribute("type") == category) {
markers[i].setVisible(true);
}
}
}
$(".toggle").click(function(){
var cat = $(this).attr("value");
// If checked
if ($(this).is(":checked"))
{
show(cat);
} else
{
hide(cat);
}
});
});
});
然后 HTML 复选框
<input value="shops" class="toggle" type="checkbox" checked="yes">
markers[i]
是一个 HTMLElement 对象(或 XMLElement)。它没有 setVisible 方法。
您想要一个不同的 "gmarkers" google.maps.Marker 对象数组,如下所示:
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var type = markers[i].getAttribute("type");
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoBox(marker, map, ib, myOptions);
gmarkers.push(marker); //*****
}