【问题标题】:reconstruct window.location.href with if/else statements使用 if/else 语句重建 window.location.href
【发布时间】:2017-11-21 02:38:44
【问题描述】:

我有一个带有语言偏好的网站。当我单击按钮更改语言时,一切正常。唯一的问题是每当我更改语言时,它都会将用户带回主页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;
}

【问题讨论】:

  • 听起来像是服务器端问题
  • window.location.href = '/' + lang; in changeLanguage() 不会更新/附加到现有 URL,而是将其覆盖为 /en(或任何语言)。

标签: javascript jquery regex indexof window.location


【解决方案1】:

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

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

您可以使用正则表达式、子字符串等来做到这一点。

【讨论】:

    【解决方案2】:

    @epascarello 是正确的。您可以使用 split 和 join 来做您需要的事情。

    这些是您遇到的问题。

    你正在这样做。

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

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

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

    你想要的是这个。

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

    然后分配新的语言。

    urlLang[3] = 'newLang';
    

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

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

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

    【讨论】:

    • *它返回一个 url 部分的数组" - 我不这么认为,那行末尾的 [1] 不是。
    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2021-04-11
    • 2016-10-13
    • 1970-01-01
    • 2011-06-09
    • 2022-11-15
    • 2017-02-05
    • 2015-07-06
    相关资源
    最近更新 更多