我通过jQuery用check网站地址更改了我的菜单项href:
if(window.location.href.indexOf("en") > -1) {
var link = $('#main-nav a');
link.each(function(){
this.href += '-en';
});
};
它的工作非常好,但我不想为2个特殊链接添加字符串'-en'。我怎么能这样做?
我试图做这样的事情,但它不起作用:
if(window.location.href.indexOf("en") > -1) {
var link = $('#main-nav a');
link.each(function(){
if(link.href === "#special1") || (link.href === "#special2"){
return this.href;
} else{
this.href += '-en';
}
});
};
答案 0 :(得分:2)
您的if
语句有语法错误。第一个)
关闭if
表达式。将其更改为:
if (link.href === "#special1" || link.href === "#special2") {
另请注意,href
属性会返回绝对路径。您应该使用href
方法获取元素的.getAttribute()
属性,或者阅读锚点的hash
属性。
您还应将link.href
更改为this.href
。
我建议:
var blackList = ["#special1", "#special2"];
$('#main-nav a').filter(function() {
return $.inArray(this.getAttribute('href'), blackList) === -1;
}).prop('href', function(_, href) {
return href + '-en';
});
另一种选择是使用.not()
方法:
$('#main-nav a')
// exclude the elements
.not('[href="#special1"], [href="#special2"]')
// update `href` properties
.prop('href', function(_, href) { return href + '-en'; });
答案 1 :(得分:1)
首先,您的if
条件存在错误。 .href
返回绝对路径,例如http://www.domain.com/yourpage.html#special1。所以,你没有办法做到这一点,如下所示。
if(link.href.indexOf("#special1") !== -1 || link.href.indexOf("#special2") !== -1) {}
if(link.href.match(/\#special[1-2]/i) !== null) {}
if(link.attr("href") === "#special1" || link.attr("href") === "#special2") {}
因此,您的代码也可以写成:
var $links = $('#main-nav a');
$links.filter(function() {
return this.href.match(/\#special[1-2]/i) === null
}).prop("href", function() {
return this.href + "-en";
});