在jquery中的ui-tabs中查找活动选项卡并更改颜色[复制]

问题描述 投票:-1回答:3

当我单击选项卡时,必须更改li的颜色。我尝试删除以前的活动类,并将活动类添加到当前li。但没有工作。

<script>
  $(document).ready(function () {
    $('.Tabs').tabs();
});

$('#tabs ul li a').click(function(){
    $(this).prev().find('li.Active').removeClass('Active');
  $(this).find('li').addClass('Active');
});
</script>

我附上了jsfiddle https://jsfiddle.net/0frr7qn2/6/

jquery html css jquery-ui jquery-ui-tabs
3个回答
3
投票

我已经对你的jQuery做了一些修改,以给你想要的结果:

$('#tabs ul li').click(function(){
  $(this).addClass('Active').siblings().removeClass('Active');
});
#tabs {
  border-top: 1px solid silver;
  border-bottom: 1px solid silver;
  border-right: white;
  background-color: #002750;
  color: white;
}

#tabs ul {
  padding: 6px 0 24px;
  margin: 0;
}

#tabs ul li {
  list-style-type: none;
  float: left;
  margin: 0 30px;
  cursor: pointer;
}

#tabs ul li.Active a {
  color: #b32218;
}

#tabs {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="Tabs">
  <div id="tabs">
    <ul>
      <li class="Active">
        <a href="#tab1">Information</a>
      </li>
      <li>
        <a href="#tab2">Accounting</a>
      </li>
      <li>
        <a href="#tab3">Tax Performance</a>
      </li>
    </ul>
  </div>
  <div id="tab1" class="Tab" style="display:none">
    <p>Tab 1 Content</p>
  </div>
  <div id="tab2" class="Tab" style="display:none">
    <p>Tab 2 Content</p>
  </div>
  <div id="tab3" class="Tab" style="display:none">
    <p>Tab 3 Content</p>
  </div>
</div>

我已经将代码优化为尽可能短。由于你在.Active上有li类,我已经将目标改为#tabs ul li,这样你就可以利用.siblings()方法了。


1
投票

我在这里分享你的jsfiddle:https://jsfiddle.net/g5t3xhj1/

它有效,这就是我做的:

  • 更新了您的css以在href而不是li上拥有活动类
  • 更新了您的jQuery,以便在单击时删除所有活动类,并将其添加回仅单击的那个

HTML

    <div class="Tabs">
  <div id="tabs">
    <ul>
      <li>
        <a class="active" href="#tab1">Information</a>
      </li>
      <li>
        <a href="#tab2">Accounting</a>
      </li>
      <li>
        <a href="#tab3">Tax Performance</a>
      </li>
    </ul>
  </div>
  <div id="tab1" class="tab" style="display:none">
    <p>Tab 1 Content</p>
  </div>

  <div id="tab2" class="tab" style="display:none">
    <p>Tab 2 Content</p>
  </div>

  <div id="tab3" class="tab" style="display:none">
    <p>Tab 3 Content</p>
  </div>
</div>

JS

 $(document).ready(function() {
   //Hide all Tabs on laod
   $('.Tabs').tabs();

 });

 $('#tabs ul li a').click(function() {
   $('#tabs ul li a').removeClass('active');
   $(this).addClass('active');
 });

CSS

li a.active {
  color: red;
}

#tabs {
  border-top: 1px solid silver;
  border-bottom: 1px solid silver;
  border-right: white;
  background-color: #002750;
  color: white;
}

#tabs ul {
  padding: 6px 0 24px;
  margin: 0;
}

#tabs ul li {
  list-style-type: none;
  float: left;
  margin: 0 30px;
  cursor: pointer;
}

#tabs ul li.Active a {
  color: #b32218;
}

#tabs {
  display: block;
}

1
投票

我认为你误解了prev()的功能,它不会让你的父母,但跟随:

“得到前面的兄弟......”(jQuery docs

您需要的是parent(),它将为您提供所点击元素的父级(请参阅docs),结合siblings()Docs),它将为您提供所需的标签行为)。

此外,我已将outline: none添加到.#tabs ul li.Active a,以删除活动标签的默认大纲样式(如果要保留它,只需删除CSS中的注释行)。

请参阅下面的代码段

$(document).ready(function() {
  $('.Tabs').tabs();

});

$('#tabs ul li a').click(function() {
  var $parent = $(this).parent();

  $parent.siblings().removeClass('Active');
  $parent.addClass('Active');
});
#tabs {
  border-top: 1px solid silver;
  border-bottom: 1px solid silver;
  border-right: white;
  background-color: #002750;
  color: white;
}

#tabs ul {
  padding: 6px 0 24px;
  margin: 0;
}

#tabs ul li {
  list-style-type: none;
  float: left;
  margin: 0 30px;
  cursor: pointer;
}

#tabs ul li.Active a {
  color: #b32218;
  outline: none; /* Remove this to leave the default outline functionality */
}

#tabs {
  display: block;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="Tabs">
  <div id="tabs">


    <ul>
      <li class="Active">
        <a href="#tab1">Information</a>
      </li>
      <li>
        <a href="#tab2">Accounting</a>
      </li>
      <li>
        <a href="#tab3">Tax Performance</a>
      </li>
    </ul>
  </div>
  <div id="tab1" class="Tab" style="display:none">
    <p>Tab 1 Content</p>
  </div>

  <div id="tab2" class="Tab" style="display:none">
    <p>Tab 2 Content</p>
  </div>

  <div id="tab3" class="Tab" style="display:none">
    <p>Tab 3 Content</p>
  </div>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.