Изменение подкаталога кода страны из URL

Мне нужно изменить код страны в 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;
}

Поэтому я ищу динамичный способ добиться этого.

Является ли testing.com вашим именем хоста, например testing.com ?

D. Seah 24.12.2020 05:28

нет, но это просто пример домена.

HNG 24.12.2020 06:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
510
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете не указывать домен и сделать это для всех кодов стран.

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 + "/");

Но это идет только на домашнюю страницу (testing.com/sg/) вместо (testing.com/sg/features).

HNG 24.12.2020 07:16

обновил мой ответ, чтобы обработать ваш вариант использования

D. Seah 24.12.2020 07:28

Потрясающий! Не знал о таком способе, но он работает довольно хорошо. Спасибо за ответ, приятель. Хорошего дня :)

HNG 24.12.2020 07:50

О, есть ошибка. Когда вы находитесь на сайте testing.com и хотите перейти на сайт testing.com/sg/, это не работает. Как вы обслуживаете и это?

HNG 24.12.2020 08:09

Другие вопросы по теме