隐藏基于Geo ip的多重元素

时间:2019-04-25 07:42:18

标签: jquery html css geolocation

我一直在使用一种工具来为不同国家/地区的用户显示隐藏元素(产品价格)。例如英国用户将看到与美国用户不同的价格。

我已经实现了this question

的解决方案

但是,这仅适用于显示价格的目标标题的第一个实例。

我知道每个id应该是唯一的,但是我不知道如何在不为每个产品复制JQuery代码的情况下执行此操作,是否有一种有效的方法可以帮助我?

    $.get("http://freegeoip.app/json/", function (response) {
      $("#ip").html("IP: " + response.ip);
                          

    $("#country_code").html(response.country_code);
                          

    if(response.country_code=='GB'||response.country_code=='US'){
                            

    document.getElementById(response.country_code).style.display = "block";
    }
    }, "jsonp");
    #US { 
      text-align: left; 
      color: black; 
      display:none;
    }
 
    #GB { 
      text-align: left; 
      color: black; 
      display:none;
    } 
    
    
    #ip{
      display:none;
      color:white;
    }

    #country_code{
      display:none;
      color:white;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="ip">Loading...</div>
    <div id="country_code"></div>
    <div id="GB"><h4 class="h4black">£69.99</h4></div>
    <div id="US"><h4 class="h4black">$89.95</h4></div>

1 个答案:

答案 0 :(得分:1)

要使您的jQuery使用下面探讨的基于class的方法,请替换此行:

document.getElementById(response.country_code).style.display = "block";

有了这个:

$(`.${response.country_code}`).show();

如果您无法使用ES6(或更新的标准),因此无法使用template literals,则可以使用旧的语法:

$('.' + response.country_code).show();

几点...

  1. 对包含国家/地区代码的class元素使用HTML,而不要使用id。这样您就可以一次显示多个元素。
  2. 由于您使用的是jQuery,因此最好使用它为DOM查找提供的内置功能。<​​/ li>

以下是说明这些要点的示例:

$(".US").show();
.US,
.GB {
  text-align: left;
  color: black;
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="GB">
  <h4 class="h4black">£69.99</h4>
</div>
<div class="US">
  <h4 class="h4black">$89.95</h4>
</div>
<div class="US">
  <h4 class="h4black">$89.95</h4>
</div>

jsFiddle