Мне нужно изменить код страны в URL-адресе, когда я выбираю страну из раскрывающегося списка.
В настоящее время в раскрывающемся списке только 3 страны, но когда я переключаюсь с SG (testing.com/sg/features) на IE, результирующий URL-адрес становится (testing.com/ie/sg/features). Он отлично работает, когда я переключаюсь с IE (testing.com/ie/features) на SG (testing.com/sg/features).
<form name = "form1">
<select class = "region regionTopBar" onchange = "formChanged(this);" name = "country" size = "1" style = "font-family: inherit; padding: 5px; border:0px; outline:0px;">
<option value = "/">International</option>
<option value = "sg/">Singapore</option>
<option value = "ie/">Ireland</option>
</select>
</form>
<script>
function formChanged(form) {
var formCountryCode = form.options[form.selectedIndex].value;
var formCountryName = form.options[form.selectedIndex].text;
if (formCountryCode !== null) {
if (localStorage) {
localStorage.country = formCountryCode ;
localStorage.currentSite = formCountryName ;
}
if (formCountryCode == "sg/"){
var url = window.location.href.replace("testing.com/", "testing.com/sg/");
location = url;
}
else if (formCountryCode == "ie/"){
var url = window.location.href.replace("testing.com/", "testing.com/ie/");
location = url;
}
//remove country code from URL when International is selected
else {
var thisLocation = window.location.href;
var splitLoc = thisLocation.split('/');
var newLocation = "";
for (let i = 0; i < splitLoc.length; i++){
if (splitLoc[i] !== "sg" && splitLoc[i] !== "ie")
newLocation += splitLoc[i] + '/';
}
newLocation = newLocation.substring(0, newLocation.length - 1);
location = newLocation ;
}
}
}
</script>
Добавление if else может решить проблему, но по мере увеличения числа стран это будет беспорядок.
else if (formCountryCode == "ie/" && window.location.href.indexOf("sg/") < 1){
var url = window.location.href.replace("testing.com/", "testing.com/ie/");
location = url;
}
else if (formCountryCode == "ie/" && window.location.href.indexOf("sg/") > 0){
var url = window.location.href.replace("testing.com/sg/", "testing.com/ie/");
location = url;
}
Поэтому я ищу динамичный способ добиться этого.
🤔 А знаете ли вы, что...
С помощью JavaScript можно валидировать данные на стороне клиента, что улучшает пользовательский опыт.
вы можете не указывать домен и сделать это для всех кодов стран.
window.location.href = "/" + formCountryCode
поскольку домен остается неизменным.
если есть путь, то вы можете сделать
window.location.href = window.location.pathname.replace(//.+?//, "/" + formCountryCode + "/")
если путь / то мы можем сделать это
const path = window.location.pathname;
window.location.href = path === "/" ?
"/" + formCountryCode :
path.replace(//.+?//, "/" + formCountryCode + "/");