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

时间:2017-11-21 02:38:44

标签: javascript jquery regex indexof window.location

我有一个有语言偏好的网站。当我点击按钮更改语言时,一切正常。唯一的问题是每当我更改语言时,用户都会立即返回主页http://localhost/en/ 但是,我有一个http://localhost/en/workhttp://localhost/en/work/#integrations的网页。 当我切换语言时,我无法弄清楚如何保持在同一页面上。我认为它与拆分和替换有关,但我不确定。这就是我到目前为止所拥有的。

底部的那个大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;
}

2 个答案:

答案 0 :(得分:-1)

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

StringComparer.OrdinalIgnoreCase

你可以使用正则表达式,子串等来完成它。

答案 1 :(得分:-1)

@epascarello是对的。您可以使用拆分和联接来执行您需要的操作。

这些是您遇到的问题。

你这样做。

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

返回url部分的数组。 如果你在哪里使用' http://localhost/en/work/#integrations'它会回来。

["http:", "", "localhost", "en", "work", "#integrations"]

你想要的是这个。

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

然后分配新的lang。

urlLang[3] = 'newLang';

然后在你的网址中使用它。

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

哪会返回' http://localhost/newLang/work/#integrations'