我目前在导航中有一个列表:
extension UIView {
func roundCorners(_ corner: UIRectCorner,_ radii: CGFloat) {
let maskLayer = CAShapeLayer()
maskLayer.frame = self.layer.bounds
maskLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corner, cornerRadii: CGSize(width: radii, height: radii)).cgPath
self.layer.mask = maskLayer
layer.masksToBounds = true
}
}
我希望在点击链接时更改活动类。有一个简单的方法吗?
答案 0 :(得分:0)
从所有li中删除活动类并将其添加到当前单击的li
$("li").click(
function(event) {
$('li').removeClass('active');
$(this).addClass('active');
event.preventDefault()
}
);

.active a{
color:red;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav menu">
<li class="active"><a href="main.php"> MainPage</a></li>
<li><a href="hello.php"> Second Link</a></li>
<li><a href="third.php"> Third Link</a></li>
<li><a href="/knowledgebase/"> Knowledge Base</a></li>
</ul>
&#13;
答案 1 :(得分:0)
如果用户点击链接,我理解以下内容:父节点的类应该设置为活动
<ul class="nav menu">
<li class="active"><a href="main.php">Main Page</a></li>
<li><a href="hello.php">hello</a></li>
</ul>
如果用户点击链接<a href="...">link</a>
,则浏览器会导航到此链接。根据代码中的链接,这意味着浏览器会离开页面main.php
并加载hello.php
。在这种情况下,您的服务器接收页面请求并将页面返回给客户端(浏览器)。由于您的链接包含.php
,我假设您使用php server side rendering。要add your navigation menu to every page我们可以include('myMenu.php');
这answer explains how include works。现在您可以在hello.php
中编写以下内容<?php
$hello = 'active';
include 'myMenu.php';
?>
myMenu.php
看起来像这样
<ul class="nav menu">
<li class="<?php echo $main; ?>"><a href="main.php">Main Page</a></li>
<li class="<?php echo $hello;?>"><a href="hello.php">hello</a></li>
</ul>
我没有安装php但无法测试它,但是i created this codepad demo并且输出是这个
<ul class="nav menu">
<li class=""><a href="main.php">Main Page</a></li>
<li class="active"><a href="hello.php">hello</a></li>
</ul>
由于hello.php
内部变量$hello
已设置为有效且变量$main
未定义,class="active"
和{{1}的输出为$hello
} class=""
。
使用javascript的客户端解决方案。
any default action normally taken by the implementation
。 $main
这意味着浏览器导航到下一页(请参阅HTML 4.01 Specification)。因此,单击链接The default behavior associated with a link is the retrieval of another Web resource
不得触发默认行为。 <a href="hello.php">hello<php>
的内容)加载到当前页面。这是通过javascript ajax请求(阅读更多here或here)来完成的。hello.php
一些指示
<li>
如果您希望它在IE&lt; 9中工作,您必须阻止点击链接IE < 9 uses only event bubbling, whereas IE9+ and all major browsers support both
而不是父节点<a ...
的默认行为。其他答案没有考虑到这一点。
如果没有更多信息您正在寻找哪种选择,这就是在黑暗中钓鱼。
答案 2 :(得分:0)
试试这个:
HTML:
<ul class="nav menu">
<li><a href="main.php"> MainPage</a></li>
<li><a href="hello.php"> Second Link</a></li>
<li><a href="third.php"> Third Link</a></li>
<li><a href="/knowledgebase/"> Knowledge Base</a></li>
</ul>
JavaScript:
$(function() {
var u = window.location.href.substr(window.location.href
.lastIndexOf("/") + 1);
$(".nav li a").each(function() {
$h = $(this).attr("href");
if ($h == u || $h == '')
$(this).addClass("active");
})
});
请务必添加jQuery!
答案 3 :(得分:-1)
您可以通过多种方式执行此操作,具体取决于您使用的前端框架。您可以使用Jquery来检测点击并添加/删除类。
$("li").click(
function(event) {
$('li').removeClass('active')
$(event.target.parentNode).addClass('active')
}
);
这样做是检查所有li
元素的点击次数。点击后,它会从所有active
元素中删除li
类,并将active
类添加到当前单击的元素中。这是plunkr - https://plnkr.co/edit/E6wIUgzkvNjn0xFQoa7F?p=preview