如何使用 jQuery 或 JavaScript 根据当前 URL 和 click 事件将类“active”分配给 li
How to assign a class "active" to the li element based on current URL and click event using jQuery or JavaScript
我正在尝试创建一个菜单,每当选择和加载页面时,都会为页面分配一个类"active"。现在,默认情况下,它仅应用于索引页。
我的菜单片段:
<ul class="nav navbar-nav">
<li class="active"><a href="http://localhost/wp/index.php">Main</a></li>
<li><a href="http://localhost/wp/news">News</a></li>
<li><a href="http://localhost/wp/contacts">Contacts</a></li>
</ul>
试试这段代码。它在我这边工作。
<script>
jQuery(document).ready(function() {
jQuery(".nav.navbar-nav li").click(function(){
jQuery(".nav.navbar-nav li").removeClass('active');
jQuery(this).addClass('active');
})
var loc = window.location.href;
jQuery(".nav.navbar-nav li").removeClass('active');
jQuery(".nav.navbar-nav li a").each(function() {
if (loc.indexOf(jQuery(this).attr("href")) != -1) {
jQuery(this).closest('li').addClass("active");
}
});
});
</script>
<ul class="nav navbar-nav">
<li class="active"><a href="http://localhost/wp/index.php">Main</a></li>
<li><a href="http://localhost/wp/news">News</a></li>
<li><a href="http://localhost/wp/contacts">Contacts</a></li>
</ul>
我假设如果你使用PHP,你的页面会是这样的。 只需在每个页面中定义一个$active变量即可。
<?php
//Main.php
$active = "Main";
?>
<?php
//news.php
$active = "News";
?>
<?php
//Contacts.php
$active = "Contacts";
?>
那么你的html将是这样的。
<ul class="nav navbar-nav">
<li class="<?php echo $active=='Main'? 'active' : ''; ?>"><a href="http://localhost/wp/index.php">Main</a></li>
<li class="<?php echo $active=='News'? 'active' : ''; ?>"><a href="http://localhost/wp/news">News</a></li>
<li class="<?php echo $active=='Contacts'? 'active' : ''; ?>"><a href="http://localhost/wp/contacts">Contacts</a></li>
</ul>
我认为这会更好:-
$(".navbar-nav").children("a").click(function(){
$(".navbar-nav").children("li").removeClass("active");
$(this).parent("li").addClass("active");
})
如果您可以编辑主题,我希望这会对您有所帮助。
$slug = basename(get_permalink());
<ul class="nav navbar-nav">
<li class="<?php echo $slug =='Main_page_slug'? 'active' : ''; ?>"><a href="http://localhost/wp/index.php">Main</a></li>
<li class="<?php echo $slug =='newpageslug'? 'active' : ''; ?>"><a href="http://localhost/wp/news">News</a></li>
<li class="<?php echo $slug =='congtactPageslug'? 'active' : ''; ?>"><a href="http://localhost/wp/contacts">Contacts</a></li>
</ul>
可能还有其他方法可以获取当前页面的URL,标题或ID,请查看此处链接
你可以在
PHP中做到这一点。
步骤:
1) 创建菜单的多维数组。
2)键是链接,值是文本。
3) 获取当前页面网址。
4) 使用
basename()
获取 url 的最后一段。5)这将是您当前的页面变量。如果为空,则将其分配给主页。
6) 遍历
menus
数组。7)循环显示菜单
li
s。8) 如果当前循环项等于当前页面,则添加类
active
否则,不添加任何类。
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$menus = array();
$menus['main'] = 'index.php';
$menus['news'] = 'News';
$menus['contacts'] = 'Contacts';
$currentURL = curPageURL();// Get Current url here.
$currentPage = basename($currentURL);
$currentPage = empty($currentPage) ? 'main' : $currentPage;
if (! empty($menus)) {
?>
<ul class="nav navbar-nav">
<?php
foreach ($menus as $lnk => $txt) {
$activeCls = ($lnk == $currentPage) ? 'active' : '';
?>
<li class="<?php echo $activeCls;?>"><a href="http://localhost/wp/<?php echo $lnk;?>"><?php echo $txt;?></a></li>
<?php
}
?>
</ul>
<?php
}
?>
我想你正在寻找这个。经过试验和测试,,请参阅演示和更新的演示
$(".navbar-nav").find("a").click(function(){
$(".navbar-nav").find("li").removeClass("active");
$(this).parent("li").addClass("active");
})
$( window ).load(function() {
var which_page=window.location.href.substr(window.location.href
.lastIndexOf("/")+1);
$(".navbar-nav").find("a").each(function(){
if($(this).attr("href") == which_page)
{
$(this).addClass("active");
}
})
});
更新的演示
试试这个jQuery:-
$("div.navbar-nav").on('click', 'li', function() {
$(this).siblings().removeClass('active');
$(this).addClass('active');
});
如果要在基于锚标记 url 的页面加载后保留最后选择的值,则还要添加此行。
// get the actual pathname:
var path = location.pathname;
// filter menu items to find one that has anchor tag with matching href:
$('.navbar-nav li').filter(function(){
return '/' + $('a', this).attr('href') === path;
// add class active to the item:
}).addClass('active');
或
$(document).ready(function () {
var pageTitle = window.location.pathname.replace(/^.*'/([^/]*)/, "$1");
$('.navbar-nav a').each(function () {
if ($(this).attr('href').toLowerCase() == pageTitle.toLocaleLowerCase())
$(this).parent().addClass('active');
});
});
希望它能帮助你:)
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- Unity 3d事件触发器将gameobject.active设置为false
- 如何使用 jQuery 或 JavaScript 根据当前 URL 和 click 事件将类“active”分配给 li
- Active X控件自定义事件无法在Javascript中激发
- Active Bootstrap Tab在DropDown SelectedIndexChanged事件中丢失其索引