如何从谷歌地图v3中删除标记?

时间:2013-10-16 11:51:11

标签: javascript google-maps google-maps-api-3

我正在建立一个网站,显示当地的午餐地点。该网站使用复选框隐藏和显示内容: -

<li>Sandwich: <input type="checkbox" checked="checked" id="sandwichbox" onclick="boxclick(this,'sandwich')" /></li>
<li>Salad: <input type="checkbox" id="saladbox" onclick="boxclick(this,'salad')" /></li>
<li>Pasta: <input type="checkbox" id="pastabox" onclick="boxclick(this,'pasta')" /></li>

这些工作正常,但我使用switch语句删除标记。

function hide(category) {
switch(category) {
    case "sandwich":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].sandwich == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
    case "salad":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].salad == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
    case "pasta":
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].pasta == 1) {
          gmarkers[i].setVisible(false);
        }
      }
      break;
}
}

我这样做是因为商店可以出售多种东西,例如三明治和沙拉,所以每个商店都不能有一个类别。因此,在我的XML中,每个产品都有节点: -

<markers>
    <marker name="Earl of Sandwich" address="40 Ludgate Hill" tel="020 7236 2846" website="www.earlofsandwich.co.uk" lat="51.514072" lng="-0.101638" sandwich="1" salad="1" pasta="" oriental="" curry="" mexican="" jacket="" soup="1" sushi="" roast="" wraps="1" falafel=""/>
    <marker name="Chao! Now" address="4 St Andrews Hill" tel="02036320368" website="www.chaonow.co.uk" lat="51.513008" lng="-0.101322" sandwich="1" salad="" pasta="" oriental="1" curry="" mexican="" jacket="" soup="1" sushi="" roast="" wraps="" falafel=""/>
</markers>

我想要做的是删除switch语句并将其替换为类似的东西,将类别值传递给for循环,但我似乎无法使用它: -

function hide(category) {
      for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].category == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

我尝试过以下方法: -

function hide(category) {
    var mymarker = "gmarkers[i]." + category;
      for (var i=0; i<gmarkers.length; i++) {
        if (mymarker == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

但这只是将mymarker作为变量传递给我,而且我没有赋值。

非常感谢任何帮助,或者如果我走错了路并且应该使用不同的数据格式,请指出。我正在考虑的另一种方法是将值添加到数组并循环遍历该数组,但是,我只有1或null值,并且无法再次使用类别变量使用2维数组。

提前致谢,如果您需要更多信息,请告知我们。

2 个答案:

答案 0 :(得分:1)

我相信您想使用变量访问对象属性。使用括号表示法而不是点符号。 假设有一个对象“人”

var person = {name: "someone", age: 23};

您可以访问“名称”属性,例如

var name = person["name"]

当属性名称包含可能是语法错误或关键字/保留字的字符时,也可以使用括号表示法。例如:

person["first name"] = "Nicholas";

它还允许括号内的变量名称。

person[propertyName] = "some value"; //propertyName is a variable

所以在你的情况下它应该是

function hide(category) {
    var mymarker = gmarkers[i][category];
      for (var i=0; i<gmarkers.length; i++) {
        if (mymarker == 1) {
          gmarkers[i].setVisible(false);
        }
      }
}

希望这会有所帮助:)

答案 1 :(得分:0)

如果类别是标记的属性,则应该起作用:

function hide(category) {
   for (var i=0; i<gmarkers.length; i++) {
     if (gmarkers[i][category] == 1) {
        gmarkers[i].setVisible(false);
     }
   }
}