Javascript 根据位置高亮显示按钮
我试图根据正在查看的页面突出显示导航按钮(在菜单中)。以下是我到目前为止的情况:Javascript 根据位置高亮显示按钮,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我试图根据正在查看的页面突出显示导航按钮(在菜单中)。以下是我到目前为止的情况: var loca = String(document.location.href); // Get document location and specific page. if (loca) { if(loca.search(RegExp("((/[\w]*)\.php)")) != -1) { activate(loca.match(RegExp("((/[\w]*)\.php)").
var loca = String(document.location.href);
// Get document location and specific page.
if (loca) {
if(loca.search(RegExp("((/[\w]*)\.php)")) != -1) {
activate(loca.match(RegExp("((/[\w]*)\.php)").split("/").join("")));
} else {
activate("home");
}
}
// Activate a button
function activate(bName) {
$(".button[name=" + bName + "]").css({
"border-left": "1px solid white",
"border-right": "1px solid white"
});
}
我想做的是:
问题是,这只会突出显示“主页”按钮。我做错了什么?另外,如果你对我如何更好地完成这项工作有任何建议,请告诉我 我会得到如下文件名:
var pathname = window.location.pathname.split("/");
var filename = pathname[pathname.length-1].split(".")[0];
alert(filename);
我没有解决方案,但我认为正则表达式是有缺陷的。您是否尝试将结果存储在变量中并将其记录在console.log中 您的正则表达式不正确
var loc_match = window.location.href.match(/(\w+)\.php/);
activate(loc_match ? loc_match[1] : "home");
我实际上已经实现了类似的东西。这是我的密码:
var currentPage = window.location.pathname.toLowerCase().split('/').reverse()[0].split('#')[0].split('?')[0];
if (!currentPage || currentPage == '')
{
currentPage = 'default.aspx';
}
$('#nav li').removeClass('current').each(function() {
var href = $(this).find('a').first().attr('href');
if (href && href.toLowerCase().indexOf(currentPage) >= 0)
{
$(this).addClass('current');
}
});
这将考虑URL中可能存在的任何查询字符串或搜索。使用
reverse()
可能不是最有效的方法,但它确实有效。当您将regexp声明为新的regexp对象时,必须使用双反斜杠转义符号(而不是一个反斜杠,当您只分配像var a=/\w/i;
这样的文字时);
因此,经过一些reg exp更正后,您的代码应该可以工作:
var loca = document.location.href;
var pattern = new RegExp("[\\w]*(?=\\.php)","i");
// Get document location and specific page.
if(pattern.test(loca)) {
activate(pattern.exec(loca));
} else {
activate("home");
}
// Activate a button
function activate(bName) {
$(".button[name=" + bName + "]").addClass('active')
}
如前所述,将类分配给活动元素更容易。我还建议创建一个CSS类,然后添加/删除该类,而不是硬编码值。@Nick:我同意你的看法,我以前也有过这种方式,但我仍然有同样的问题。这非常有效,我也非常感谢您的提示。:)我最喜欢这种方式;更简单更干净。非常感谢。