如果url没有';不存在(javascript)

如果url没有';不存在(javascript),javascript,class,url,lang,Javascript,Class,Url,Lang,我有一个多语言网站,人们通过带有url后缀(例如/lang/en)或没有后缀(仅页面url)的链接进入 现在我想创建一个带有链接的语言切换函数(带有一个类来触发javascript) 例如,我的链接类将是“english”,在JS中,我首先需要检查url是否已经有语言后缀,然后再附加它 以下是我现在(从另一个线程)得到的信息: 注意我想在我的网站的每个页面上实现两个链接,这两个链接将由带有 lang/en 或 它们的后缀。当单击这些链接时,将加载相同的页面,但url中有语言后缀,我的语言插件

我有一个多语言网站,人们通过带有url后缀(例如/lang/en)或没有后缀(仅页面url)的链接进入

现在我想创建一个带有链接的语言切换函数(带有一个类来触发javascript)

例如,我的链接类将是“english”,在JS中,我首先需要检查url是否已经有语言后缀,然后再附加它

以下是我现在(从另一个线程)得到的信息:

注意我想在我的网站的每个页面上实现两个链接,这两个链接将由带有

lang/en 


它们的后缀。当单击这些链接时,将加载相同的页面,但url中有语言后缀,我的语言插件将选择该语言作为礼物。

如果后缀总是以/lang开头,请尝试此操作

或者如果你想保留一个,如果有的话

$('.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');
});

您可以使用正则表达式检查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;
});

不知何故,上面的javascript都不适合我,我不知道我做错了什么,但最后我决定求助于php,因为我更了解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 ;

}
//将语言添加到菜单
添加过滤器(“wp\U导航菜单项”,“添加语言”,10,2);
函数添加语言($items,$args)
{
如果($args->theme\u location=='主菜单')
$current_url=(是_ssl()?'https://':'http://')。$服务器['http_主机]。$服务器['REQUEST_URI'];
$href=str_replace(数组('/lang/en','/lang/nl'),'','$current_url);
$english='
  • ; $nederlands='
  • ; 返回$items.$english.$nederlands; }
    这会发现我的菜单名为“主菜单”,并在此菜单中添加两项,其中包括$english和$nederlands链接

    我必须用$\u server['HTTP\u HOST']来获取页面url,而不是get\u permalink(),因为它不知怎么返回了一个随机url。第一个总是有效的,使用str_replace,我首先替换语言添加项(str_replace不需要if语句,它总是在替换之前检查它是否存在)


    希望这能帮助其他人,仍然想知道为什么javascript不适合我

    嗨,戴夫,谢谢你的回复!宝贵的代码!以下是我对它的理解:
    $('.english').attr('href',function(){//suffix是空的,如果URL已经包含语言部分var suffix=this.href.match(/lang\/en\/?$/I)?“”:“/lang/en”;返回this.href+suffix;})和“.dutch”类菜单url的相同部分。我的链接看起来像,但在页面加载时,在标题中包含代码时,它不会将链接重写为url+后缀。知道这是怎么回事吗?好吧,我发现问题是:我的类不在href上,而是在它周围的
  • 上,它看起来像:
  • english
  • 我必须如何处理
  • 中的a href?更简单-我会尽快回复你,谢谢你的回复!我发现wordpress将我想要寻址的类添加到
  • 而不是
  • 。我如何在页面加载时处理这个内部li标记?class“.datalink”实际上在我的代码class“.english”中(datalink来自我获取代码的线程)。所以我更多的是想:'$('.english>a').attr('href',function(){`这是声音编码吗?(the.english>a“part?)。我想在li类英语中处理a。奇怪的是,这并没有在页面加载时重写我的a href……我有点困惑!!我现在得到的是:
    $('.english>a').attr('href',function(){var suffix=this.href.match(/lang\/en\/?$/i)?:“/lang/en”返回this.href+suffix;})
    你好,谢谢你尝试解决这个问题,我认为
    。每个
    对我都不起作用,因为对于这一个片段,我只想重写或编写一个href url(我将为其他语言链接添加另一个片段)。问题是,我可以抓取url并添加后缀,但url可能有错误语言的后缀、正确的语言或根本没有后缀。因此,我得到了上面添加的代码,但它在我的页面中没有任何作用。首先我想,因为我的地址是li而不是a,但现在我有了
    。英语a
    这不可能,有什么想法吗?语言是否总是
    en
    ,还是应该与元素标题中指定的语言相关?
    $('.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');
    });
    
    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;
    });
    
    // 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 ;
    
    }