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元素,那么您将需要===检查