add/remove class 如果 id/class 匹配

add/remove class if id/class match

我正在尝试 link 使用旋转木马类型 div 布局的点导航,并且需要正确的 div 在单击每个特定点时显示,以及 visa反之亦然,因此点在显示特定 div 时处于活动状态。第二部分很重要,因为我有不止一种导航形式。

这是项目http://polyhedron.io/

圆点html

<div class="dotstyle dotstyle-scaleup">
        <ul>
            <li id="avn" class="current"><a href="#"></a></li>
            <li id="pp"><a href="#"></a></li>
            <li id="w65"><a href="#"></a></li>
            <li id="trs"><a href="#"></a></li>
            <li id="cc"><a href="#"></a></li>
        </ul>
    </div>

(wordpress 菜单)项目html

<ul id="menu-project" class="show">
  <li class="avn selected"></li>
  <li class="pp"></li>
  <li class="w65"></li>
  <li class="trs"></li>
  <li class="cc"></li>
</ul>

jQuery

$(document).ready(function(){
    var dots = $('.dotstyle ul li');
    var project = $('ul#menu-project li.menu-item');
    var dotsId = dots.attr('id');
    var projectClass = project.attr('class');

    $(dots).click(function(){
        $(dots).removeClass('current');
        $(this).addClass('current');
    });

    $(dots).each(function(){
        if (dots.hasClass('current')) {
            if (dotsId = projectClass) {
                project.addClass('selected');
            } else {
                project.removeClass('selected');
            }
        } else {

        }
    });
});

这是我能得到的最接近的,但它目前只是将 "selected" 添加到每个列表项。

$(document).ready(function() {
    var dots = $('.dotstyle ul li');
    var project = $('ul#menu-project li.menu-item');
    var dotsId = dots.attr('id');
    var projectClass = project.attr('class');

    $(dots).click(function() {
        $(dots).removeClass('current');
        $(this).addClass('current');
    });

    $(dots).each(function() {
        if (dots.hasClass('current')) {
            if (dotsId = projectClass) {
                project.addClass('selected');
            } else {
                project.removeClass('selected');
            }
        }
    });
});

而不是 if (dotsId = projectClass) 在两者之间放置一个双等号 (==)。单个等号将 dotsId 的值设置为 projectClass EVERY TIME,这是你不想要的!

这应该有效:

$(document).ready(function() {

  var $dots = $('.dotstyle ul li');
  var $project = $('#menu-project');

  $dots.on('click', function(e) {
    e.preventDefault();
    var $this = $(this);
    var dotsId = $this.attr('id');

    $('.dotstyle ul').find('li.current').removeClass('current');
    $this.addClass('current');
    $project.find('li.selected').removeClass('selected');
    $project.find('li.' + dotsId).addClass('selected');

  });


  $(document).keydown(function(e) {
    switch (e.which) {
      case 37: // left
        $('.dotstyle ul').find('li.current').prev().addClass('current');
        $('.dotstyle ul').find('li.current').next().removeClass('current');
        $project.find('li.selected').prev().addClass('selected');
        $project.find('li.selected').next().removeClass('selected');
        break;
      case 39: // right
        $('.dotstyle ul').find('li.current').next().addClass('current');
        $('.dotstyle ul').find('li.current').prev().removeClass('current');
        $project.find('li.selected').next().addClass('selected');
        $project.find('li.selected').prev().removeClass('selected');
        break;

      default:
        return;
    }
    e.preventDefault();
  });


});
.dotstyle ul li a {
  color: red;
}
.dotstyle ul li.current a {
  color: blue;
}
#menu-project li {
  color: green;
}
#menu-project li.selected {
  color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="dotstyle dotstyle-scaleup">
  <ul>
    <li id="avn" class="current">
      <a href="#">test</a>
    </li>
    <li id="pp">
      <a href="#">test</a>
    </li>
    <li id="w65">
      <a href="#">test</a>
    </li>
    <li id="trs">
      <a href="#">test</a>
    </li>
    <li id="cc">
      <a href="#">test</a>
    </li>
  </ul>
</div>


<ul id="menu-project" class="show">
  <li class="avn selected">test</li>
  <li class="pp">test</li>
  <li class="w65">test</li>
  <li class="trs">test</li>
  <li class="cc">test</li>
</ul>

一点澄清:

您只需要将点击绑定到您想要获取信息的元素上。另外,我喜欢用 $ 标记我的 DOM 对象,而没有标记属性(以便于代码管理)。您创建了一个 DOM 对象

var dots = $('.dotstyle ul li');

然后为该对象创建另一个对象

$(dots)...

对于 jQuery()$() 是 shorthand,即 jQuery 对象。所以不需要再包裹它。

绑定点击事件后,从被点击的元素(id)中获取信息,进行class检查,然后需要在第二个菜单中查找带有[=55=的元素] 匹配被点击项目的 id

$project.find('li.' + dotsId)

由于您是通过一次单击查看所有 $project 个元素,因此不需要 each()。只需检查里面的列表项是否有 class,如果有就添加一个新的。

希望对您有所帮助。

编辑

我已经编辑了代码,现在应该按照你在评论中说的去做了。

编辑 2

再次编辑代码,并包含键绑定...