2013-04-23 31 views
0

下面是我的代碼被用於編輯環節的工作以及基於位置的用戶發送到一個網站,但我還想在兩個方面對這個代碼擴展:先進的全球重定向

$(window).load(function() { 
    $.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 
     var country = data.address.country; 
     var urls = { 
      'Australia': 'www.website.com.au', 
      'New Zealand': 'www.website.co.nz' 
     } 
     var locstring = "/contact_us.html"; 
     var locstring2 = "/about_us.html"; 
     var cchUrl = 'www.website.com'; 
     if(urls[country]) { 
      cchUrl = urls[country]; 
     } 
     //alert(cchUrl); 
     $("#global").attr('href', 'http://' + cchUrl + locstring); 
     $("#global2").attr('href', 'http://' + cchUrl + locstring2); 
    }); 
}); 

<a href="http://www.website.com/contact_us.html" id="global" target="_blank">Contact Us</a> 

<a href="http://www.website.com/about_us.html" id="global2" target="_blank">About Us</a> 
  1. 正如你所看到的,我必須設置兩個變量(locstring,locstring2)和兩個id(global,global2)來將用戶發送到兩個不同的位置,是否可以使用id全局來更改域,但它不會重要的是在域之後發生什麼路徑。我想簡化代碼,所以www.thiswillchange.com/thiswontchange使用一個ID而不是爲不同鏈接設置多個ID的變量&變量。

  2. 作爲一個不同的項目,我可以使用此代碼(使用從第1點開始的更改)創建「頁面加載」,以便用戶例如瀏覽頁面www.website.co.nz/contact_us .html表示它會檢測到它們來自澳大利亞並將它們發送到www.website.com.au/contact_us.html網站,反之亦然,或者需要採用完全不同的方法。

請記住,我可能希望將來添加更多的國家到列表中,因爲我添加了更多網站。

編輯:也許我應該詳細說明一下國際斜線頁面上的文本鏈接,沒有菜單,我只是使用全局重定向來更改鏈接域以將用戶發送到正確的網站位置,然後是頁面的路徑。

+0

這是什麼意思:「是有可能,我一定能成功,所以我可以使用id全球更改URL,但不要緊域後來自哪個路徑。」 – 2013-04-23 23:03:00

+0

對不起,我的名字打字很糟糕,在一個例子中,文本將是「點擊這裏瞭解我們或點擊這裏與我們聯繫」這是在國際啓動頁面上,然後jQuery將鏈接中的域名更改爲發送給他們那裏的國家的正確的領域聯繫我們頁面,我想要實現的是,而不是爲每個新的鏈接做一個新的變量(locstring,locstring2),我可以改變域和任何/域後的任何路徑無關緊要 – webmonkey237 2013-04-23 23:11:01

回答

1

我不知道這對你是否可行,但是你可以從javascript建立菜單而不是寫html然後改變它。 這樣,您也可以輕鬆添加更多菜單項,而無需更改html並引入更多全局變量。

$(window).load(function() { 
    $.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 

     var country = data.address.country; 
     var urls = { 
      'Australia': 'www.website.com.au', 
      'New Zealand': 'www.website.co.nz' 
     }; 

     var menu = { 
      'Contact Us' : '/contact_us.html', 
      'About Us' : '/about_us.html' 
     }; 

     var cchUrl = 'www.website.com'; 
     if (urls[country]) { 
      cchUrl = urls[country]; 
     } 
     for(name in menu){ 
      $('#menu').append($('<a/>',{'text':name,'href':'http://'+cchUrl+'/'+menu[name]})); 
     } 

    }); 
}); 

<div id="menu"></div> 

下一個嘗試:
這裏的所有環節得到相同的類。然後他們每個人的href中的域將被cchUrl取代。

$(window).load(function() { 
    $.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 
     var country = data.address.country; 
     var urls = { 
      'Australia': 'www.website.com.au', 
      'New Zealand': 'www.website.co.nz' 
     } 

     var cchUrl = 'www.website.com'; 
     if(urls[country]) { 
      cchUrl = urls[country]; 
     } 

     $('.global').each(function(){ 
      var href = $(this).attr('href'); 
      $(this).attr('href', href.replace(/http:\/\/.*?\//,'http://'+cchUrl+'/')); 
     }); 
    }); 
}); 

<a href="http://www.website.com/contact_us.html" class="global" target="_blank">Contact Us</a> 
<a href="http://www.website.com/about_us.html" class="global" target="_blank">About Us</a> 
+0

感謝您的輸入,也許我應該詳細說明一下,文本中的鏈接是國際斜線頁,沒有菜單,我只是使用全局重定向將用戶發送到正確的網站以獲取位置,然後這一頁。 – webmonkey237 2013-04-23 23:03:46

+0

webmonkey237我建議你重新考慮一下;它看起來像安迪的解決方案將做你想要的。你的想法是替換已經構建好的域名,這需要基於正則表達式的分析,而安迪只會從一開始就構建你想要的。 – 2013-04-24 00:03:42

+0

@ webmonkey237對不起,我還是不完全理解它。你想讓人們自動重定向到他們的國家頁面嗎?在你的例子中你有2個鏈接,然後將他們的hrefs改爲本地化的。這正是我所做的,只是我創建了JavaScript和我剛剛命名的div插入鏈接菜單的鏈接。你說沒有菜單,但是這兩個鏈接(聯繫人,大約)都在intl上。頁面,還是他們不是? – Andy 2013-04-24 07:15:49

0
function update(id, domain) { 
    var old = $(id).attr('href') 
    $(id).attr('href', old.replace(/http:\/\/.+?\/(.*?)/, 'http://'+domain+'/$1')) 
} 
update("#global", cchUrl)