2017-08-04 165 views
-1

如果訪問者來自美國,我想隱藏第一個div,如果訪問者不是來自美國,我想隱藏第二個div。兩個div都有相同的類。jquery根據geoIP隱藏第一個或第二個子元素

<div class="myclass">from US</div> 
 
<div class="myclass">not from US</div>

我發現與freegeoip.net/json一些容易實現,但我不能使其適應我的特定需求。

$.get("http://freegeoip.net/json/", function (response) { 
 
$("#ip").html("IP: " + response.ip); 
 
document.getElementsByClassName(response.country_code)[0].style.display = "none"; 
 
}, "jsonp");

+0

你到目前爲止試過的東西?添加更多的示例代碼 –

+0

我試圖適應這個例子,但我失敗了:https://stackoverflow.com/questions/30173809/how-to-show-or-hide-element-based-on-geo-ip –

回答

0

您真正需要在這一點上做的是,從AJAX請求和讀取響應。由於您使用jQuery的,這是比較容易的:

$.ajax('https://freegeoip.net/json/') 
    .done(function (response) { 
     var isUS = response.country_code === 'US'; 
     // Your code to hide/show here. 
    }); 

這裏是一個工作示例:https://jsfiddle.net/TheQueue841/ap3tfyf9/4/

我做了小改動原來的代碼;這些元素默認隱藏以避免不需要的內容。

請注意:無論出於何種原因,Firefox都會拒絕ajax調用,但它在Chrome中正常工作。由於Firefox有額外的(偶爾不必要的)安全驗證,這可能是由於目標服務器上的某些原因造成的。我找不到可以工作的IP地理位置api,但是其他任何api都能以相同的方式工作。請先查看回復,看看國家/國家/地區代碼的存儲方式。

編輯:已更新解決方案,以按位置而不是按類別定位。

+0

謝謝!我的解決方案有一個問題,div由複雜的php生成,我不想修改,它們也有相同的我不能將類添加到div,這就是爲什麼我要求第一個和第二個孩子的解決方案 –

+0

就像我說的,你可以使用Sergej的答案,我用一個解決方案更新了我的答案這個方法來選擇適當的元素,我默認情況下隱藏了它,但是如果你不能這樣做,只需在eq選擇器中交換數字並將'.show()'改爲'.hide()' –

+0

謝謝,您的解決方案非常完美! –

0

(function($) { 
 
    $(document).ready(function() { 
 
     var isFromUS = true; // Get the flag from your geoIP service 
 
     $('.myclass').eq(isFromUS ? 0 : 1).hide(); 
 
    }); 
 
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="myclass">from US</div> 
 
<div class="myclass">not from US</div>

+0

如何你會從你的代碼中獲得位置? –

+0

你看過評論嗎?代碼只是演示如何隱藏單獨的div元素,基於一個標誌 - 是來自美國的用戶還是不是。但不是如何獲得用戶位置。該標誌可以使用geoIP服務或HTML5 API獲得(如果最終用戶允許) – Sergej

+0

謝謝Sergej,這是我一直在尋找的,你是否也可以添加代碼來檢索geoIP,就像'「$ .get(」 http://freegeoip.net/json/「,function(response)」' –

相關問題