Jquery 在单击时将href与window.location.hash进行比较,添加类
我正在尝试编写一个脚本,将单击的Jquery 在单击时将href与window.location.hash进行比较,添加类,jquery,Jquery,我正在尝试编写一个脚本,将单击的li中的href值与window.location.hash进行比较,如果它们匹配,则向单击的li添加一个类。换句话说,我正在设计一个活动导航部分的样式。它几乎可以工作–如果href和window.location.hash匹配,它只会在第二次单击li时添加类。我想这是一个事件问题。我尝试添加一个超时,但没有成功 这就是我目前的情况: $('#left-nav > ul > li').on('click', function() { if ($(t
li
中的href
值与window.location.hash
进行比较,如果它们匹配,则向单击的li
添加一个类。换句话说,我正在设计一个活动导航部分的样式。它几乎可以工作–如果href
和window.location.hash
匹配,它只会在第二次单击li
时添加类。我想这是一个事件问题。我尝试添加一个超时,但没有成功
这就是我目前的情况:
$('#left-nav > ul > li').on('click', function() {
if ($(this).find('.left-nav-link').attr('href') == window.location.hash) {
$('#left-nav > ul > li').removeClass('active');
$(this).addClass('active');
}
});
HTML结构:
<div id="left-nav">
<ul>
<li><a class="left-nav-link" href="#first-link">First Link</a></li>
<li><a class="left-nav-link" href="#second-link">Second Link</a></li>
<li><a class="left-nav-link" href="#third-link">Third Link</a></li>
</ul>
</div>
似乎过于复杂了。您不需要使用if()
,因为您已经知道单击了哪个元素
$('#left-nav > ul > li').on('click', function() {
$(this).addClass('active').siblings().removeClass('active');
});
似乎太复杂了。您不需要使用
if()
,因为您已经知道单击了哪个元素
$('#left-nav > ul > li').on('click', function() {
$(this).addClass('active').siblings().removeClass('active');
});
alert($(this).find('.left nav link').attr('href')+“==”+window.location.hash)代码>可能是信息性的。你能添加html吗?这样我们就可以帮忙了you@JulioPérez当然,只是补充了一句:当您已经知道单击了哪个元素时,为什么需要if()
?警报($(this).find('.left nav link').attr('href')+“=”+window.location.hash)代码>可能是信息性的。你能添加html吗?这样我们就可以帮忙了you@JulioPérez当然,只是补充了一句:当您已经知道单击了哪个元素时,为什么还需要if()
?这一点很好。我想我离开了if()
,是因为我尝试了另一种方法。这管用@MarioParra这是一个事件触发/计时的问题,您在哈希更改之前检查它们是否匹配,这就是为什么它总是在第二个上工作的原因click@Curt是的,我明白这一点,这就是为什么我尝试添加延迟/超时来检查它的变化,但它不起作用,我也不知道还有什么可以尝试。@Curt也这么认为……setTimeout可能会修复它,但在这种情况下仍然会有过大的杀伤力。如果您有多个锚元素指向同一个哈希URL,您可以始终将检查绑定到window.onhashchange,而不是单击LI元素,然后需要===checkGood点。我想我离开了if()
,是因为我尝试了另一种方法。这管用@MarioParra这是一个事件触发/计时的问题,您在哈希更改之前检查它们是否匹配,这就是为什么它总是在第二个上工作的原因click@Curt是的,我明白这一点,这就是为什么我尝试添加延迟/超时来检查它的变化,但是它不起作用,我也不知道还有什么可以尝试。@Curt也这么认为……setTimeout可能已经修复了它,但对于这种情况,它仍然是过度杀伤力。如果您有多个锚元素指向同一个哈希URL,您可以始终将检查绑定到window.onhashchange,而不是单击LI元素,那么您将需要===检查