Answers:
试试这个: window.location.href.split('?')[0]
#
术语)。您必须使用正则表达式或使用多个.split()函数,这时您已经失去了清理URL时“简单”答案的价值。当然,从技术上讲,这超出了问题的范围,但是我认为这仍然有意义。
了解Window.location
和Location
界面:
var url = [location.protocol, '//', location.host, location.pathname].join('');
${location.protocol}//${location.host}${location.pathname}
pathname
可能会掉头/
(直到IE 11?)。啊,IE,总是雪花,不是吗?
location.toString().replace(location.search, "")
location.href.replace(location.search, '')
var url = window.location.origin + window.location.pathname;
使用属性 window.location
var loc = window.location;
var withoutQuery = loc.hostname + loc.pathname;
var includingProtocol = loc.protocol + "//" + loc.hostname + loc.pathname;
您可以在https://developer.mozilla.org/en/DOM/window.location上查看更多属性。
只需将这两行添加到JS中的$(document).ready中,如下所示:
$(document).ready(function () {
$("div.sidebar nav a").removeClass("active");
$('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});
最好使用美元符号($)(结尾为)
$('nav a[href$
代替(^)(开头)
$('nav a[href^
因为,如果您使用(^)符号,并且在导航菜单中具有嵌套的URL(例如“ / account”和“ / account / roles”),
它将激活他们两个。
如果您使用点网核心3.1,则它支持大小写忽略路由,因此如果溃败点是小写字母并且用户使用大写字母写出溃败点,则前一种方法没有帮助。
因此,以下代码非常有帮助:
$(document).ready(function () {
$("div.sidebar nav a").removeClass("active");
var urlPath = window.location.pathname.split("?")[0];
var nav = $('div.sidebar nav a').filter(function () {
return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
});
$(nav).each(function () {
if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
$(this).addClass('active');
});
});