Jquery删除&在LI导航上添加“活动”类可以使用preventDefault,但链接不再
Jquery删除添加活动类到li节点不工作
我知道删除活动类并将其添加到li是非常基本的,以便突出显示当前页面的导航项,但我无法让它工作。
我发现必须使用e.preventDefault()才能使其正常工作,但是当我这样做时,链接不起作用,但突出显示的导航项有效。如果我删除了preventDefault(),那么它会导航但不会突出显示。我应该说我的导航系统位于header.php包含文件中。这就是我所拥有的:
<ul class="myNav">
<li><a href="index.php">Home</a></li>
<li><a href="portfolio.php">Portfolio</a></li>
<li><a href="about.php">About</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
$('.myNav li a').click(function (e)
{
e.preventDefault();
$('.myNav li').siblings().removeClass('active');
$(this).parent().addClass('active');
//var url = $(this).attr("href");
//window.location = url;
});
我尝试将页面发送到点击的网址,这会加载正确的页面,但它会删除该类!我想解决这个问题,但我也想了解为什么它不能正常工作。
答案 0 :(得分:2)
我担心使用only
jQuery无法同时突出显示和重定向到页面。您最好尝试将类active
添加到网页中的相应li
,例如在index.php
页面中添加此行
<li class="active"><a href="index.php">Home</a></li>
因为您无法仅使用jQuery
来保留菜单的状态。如果页面的此菜单部分位于header.php
之类的单独文件中,则必须检测哪一个是当前页面。并且可以轻松地在php中检测当前页面并将class="active"
添加到相应的li
以突出显示该内容。
答案 1 :(得分:1)
当您离开页面时,无论您在javascript中执行的操作都将丢失。唯一的办法是让你的服务器程序设置'active'标志,可能是通过向链接添加查询参数,或者通过检查程序的url
答案 2 :(得分:1)
您必须通过检测当前网址并将其与导航中节点的网址进行比较,在PHP中执行此操作。看看这个:How can I get the current page's full URL on a Windows/IIS server?
答案 3 :(得分:1)
我最终在PHP中这样做:
<?php
//grab the current page name to use in the
$path = $_SERVER['PHP_SELF'];
$page = basename($path);
$page = basename($path, '.php');
?>
<li<?php if ($page == 'index') echo 'class="active"';?>><a href="index.php">Home</a></li>
<li <?php if ($page == 'portfolio') echo "class='active'"; ?> ><a href="portfolio.php">Portfolio</a></li>
<li <?php if ($page == 'about') echo 'class="active"'; ?> ><a href="about.php">About</a></li>
<li <?php if ($page == 'contact') echo 'class="active"'; ?> ><a href="contact.php">Contact</a></li>
答案 4 :(得分:0)
var link = document.location.href.split('/').slice(-1); // retrieve page name
$('#menuInner li a.active').removeClass('active'); // remove class 'active'
$('#menuInner li a[href$="'+link+'"]').parent().addClass('active');// and add it to a matching