Javascript 使用if/else语句重构window.location.href

Javascript 使用if/else语句重构window.location.href,javascript,jquery,regex,indexof,window.location,Javascript,Jquery,Regex,Indexof,Window.location,我有一个有语言偏好的网站。当我点击按钮更改语言时,一切正常。唯一的问题是,每当我更改语言时,它都会将用户带回到主页 然而,我有一个页面是,或者。 当我切换语言时,我不知道如何保持在同一页上。我认为这与拆分和替换有关,但我不确定。这就是我目前所拥有的 底部的那个大if语句是我失败的尝试(这里很新)。有什么建议吗 languageOptions = ['en', 'zh-cn', 'zh-hk', 'jp-jp', 'ko-kr', 'th-th']; languageDictionary = {

我有一个有语言偏好的网站。当我点击按钮更改语言时,一切正常。唯一的问题是,每当我更改语言时,它都会将用户带回到主页 然而,我有一个页面是,或者。 当我切换语言时,我不知道如何保持在同一页上。我认为这与拆分和替换有关,但我不确定。这就是我目前所拥有的

底部的那个大if语句是我失败的尝试(这里很新)。有什么建议吗

languageOptions = ['en', 'zh-cn', 'zh-hk', 'jp-jp', 'ko-kr', 'th-th'];
languageDictionary = {
    'en': 'en',
    'en-gb': 'en',
    'en-us': 'en',
    'zh-cn': 'zh-cn',
} 


function checkLanguage() {
    let lang = localStorage.getItem('lang');  
    if (!lang) {
        lang = navigator.language.toLocaleLowerCase();
    }
    if (lang) {
        let userLang = languageDictionary[lang];

        let urlLang = window.location.pathname.split('/')[1];

        if (languageOptions.indexOf(urlLang) !== -1 && urlLang !== userLang) {
            changeLanguage(userLang);
        }
    }
};

checkLanguage();


function changeLanguage(lang) {
    if (languageOptions.indexOf(lang) === -1) {
        return;
    }
    localStorage.setItem('lang', lang);
    window.location.href = '/' + lang;
}

if (window.location.hash) {
    window.location.split('/')[1];
    window.location.replace[1](lang);
    window.location.href = '/' + lang + hash;
}

有很多方法可以做到这一点,但有一种方法就是拆分、更新和加入

var parts = window.location.href.split("/")
parts[3] = "foo"
window.location.href = parts.join("/")

您可以使用正则表达式、子字符串等执行此操作。

@epascarello是正确的。您可以使用split和join来完成所需的操作

这些就是你面临的问题

你正在这样做

let urlLang = window.location.pathname.split('/')[1];
返回url部分的数组。 如果您选择在何处使用“”,它将返回

["http:", "", "localhost", "en", "work", "#integrations"]
你想要的是这个

let urlLang = window.location.pathname.split('/');
然后分配新的lang

urlLang[3] = 'newLang';
然后在你的url中使用它

window.location.href = urlLang.join("/");

它将返回“”

听起来像服务器端问题
window.location.href='/'+langchangeLanguage()
中的code>并没有更新/指向现有的URL,而是将其覆盖为
/en
(或任何一种语言)。*它返回一个URL部分数组”-我不这么认为,这行末尾的
[1]