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