如果url已经存在,请将语言后缀添加到url(javascript)

时间:2013-05-12 07:56:16

标签: javascript class url lang

我有一个多语言网站,人们通过链接带来一个url后缀(例如/ lang / en)或没有后缀(只是页面网址)。

现在我想创建一个带有链接的语言切换功能(带有一个触发javascript的类)。

我的链接类例如是“英语”,在JS中我首先需要检查在我追加它之前是否已经没有语言后缀。

这就是我现在所拥有的(来自另一个主题):

<a class="english" href="">English</a>
<script>

$('.datalink').attr('href', function() {
return this.href + '/lang/en';

});

</script>

这会添加后缀但不检查它是否已经存在,如何检查它是否已经存在而不是追加它?或者将其改为另一种语言(/ lang / nl)?

更新

实际上我的班级不在href上,而是在<li>周围,它看起来像:

<li class="english"><a title="English">English</a></li>

现在我有了

$('.english >a').attr('href', function() { 
  var suffix = this.href.match(/lang\/en\/?$/i) ? "" : "/lang/en"; 
  return this.href + suffix; 
}); 

注意我希望实现的是我网站每个页面上的两个链接,它们将包含基本页面网址

lang/en 

lang/nl

后缀给他们。点击后,这些链接将加载相同的页面,但在网址中加上语言后缀,我的语言插件会选择当前的语言。

3 个答案:

答案 0 :(得分:0)

如果它是一个始终以/ lang开头的后缀,请尝试使用

Live Demo

$('.english a').each(function() {
    $(this).attr('href', this.href.split("/lang")[0] + '/lang/en');
});

或者如果你想保留一个

$('.english a').each(function() {
  var href = this.href;
  var pos = href.indexOf("/lang/");
  if (pos == -1) $(this).attr('href', href.substring(0,pos)+'/lang/en');
});

答案 1 :(得分:0)

您可以使用正则表达式检查URL是否包含后缀:

if (this.href.match(/lang\/en\/?$/i)) {
    /* CONTAINS THE SUFFIX */
} else {
    /* DOESN'T CONTAIN IT */
}

我可能会这样做的方式如下:

$('.datalink').attr('href', function() {
    // suffix is blank if the URL already contains the language portion
    var suffix = this.href.match(/lang\/en\/?$/i) ? "" : "/lang/en";
    return this.href + suffix;
});

答案 2 :(得分:0)

不知何故上述javascript都没有为我工作,我不知道我做错了什么但是我决定诉诸php因为我明白了更好。我在wordpress网站上使用它,我想出了以下代码(在theme functions.php中),它对我有用:

// add languages to menu
add_filter('wp_nav_menu_items','add_langs', 10, 2);

function add_langs($items, $args) 
{

    if( $args->theme_location == 'primary-menu')

$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] .     $_SERVER['REQUEST_URI'];
$href = str_replace(array('/lang/en','/lang/nl'),'',$current_url);

    $english = '<li class="english"><a href="'.$href.'/lang/en">EN</a></li>';
    $nederlands = '<li class="nederlands"><a href="'.$href.'/lang/nl">NL</a></li>';
    return $items . $english . $nederlands ;

}

这会找到名为“primary-menu”的菜单,并在此菜单中添加两个项目,包括$ english和$ nederlands链接。

我必须使用$ _server ['HTTP_HOST']而不是get_permalink()来获取页面网址,因为它会以某种方式返回一个随机网址。第一个总是工作,并且使用str_replace我首先替换语言添加(如果它们存在(str_replace不需要if语句,它总是在替换之前检查它是否存在)

希望这有助于其他人,仍然想知道为什么javascript对我不起作用!