简体   繁体   English

jQuery 选项卡:如何从选项卡 div 将类添加到单独的 UL 选项卡?

[英]jQuery tabs: how to addClass to a separate UL tab from the tab div?

I am trying to set up a tabs nav with jQuery without using the jQuery Tabs UI.我正在尝试使用 jQuery 设置选项卡导航,而不使用 jQuery 选项卡 UI。 From what I understand, when the user clicks the list element, the code据我了解,当用户单击列表元素时,代码

  • grabs the list element with data-tab="X" and adds the class current which will set the opacity: 1 for that link (default: 50%),使用data-tab="X"获取列表元素并添加 class current ,这将设置opacity: 1 (默认值:50%),
  • then removes the current class from the tabs content section and displays the corresponding div with the same data-tab attribute.然后从选项卡内容部分中删除current的 class 并显示具有相同data-tab属性的相应 div。

I tried to replicate the same process with a button click.我试图通过单击按钮来复制相同的过程。 This seems to work as it removes the current class from the .tab-link classes, but doesn't add the current class to the corresponding ul.tabs li element.这似乎有效,因为它从.tab-link类中删除了当前的 class ,但没有将当前的 class 添加到相应的ul.tabs li元素中。 This creates a confusing UX as it's not clear what section/tab is active/current when the user presses the next/previous buttons.这会产生令人困惑的用户体验,因为当用户按下下一个/上一个按钮时,不清楚哪个部分/选项卡是活动的/当前的。

How can I add the current class to the corresponding ul.tabs li when I click the next and previous buttons?单击下一个和上一个按钮时,如何将当前的 class 添加到相应的ul.tabs li中? Is this a jQuery issue or a CSS issue?这是 jQuery 问题还是 CSS 问题?

 $(document).ready(function () { $('ul.tabs li').click(function () { var tab_id = $(this).attr('data-tab'); $('ul.tabs li').removeClass('current'); $('.tab-content').removeClass('current'); $(this).addClass('current'); $("#" + tab_id).addClass('current'); }); $('button.next-previous').click(function () { var tab_id = $(this).attr('data-tab'); $('ul.tabs li').removeClass('current'); $('.tab-content').removeClass('current'); $(this).addClass('current'); $("#" + tab_id).addClass('current'); $('li').find('ul:first').addClass('moveme'); $('html, body').animate({ scrollTop: $("#tabsNav").offset().top }, 2000); }); });
 :root { --darkgreen: #203631; --background: #f5f5f5; --pinkaccent: #f49393; --white: #fff; --black: #000; }.formButton { display: inline-block; border-radius: 4px; background-color: var(--pinkaccent); border: none; color: #ffffff; text-align: center; font: italic 600 18px var(--secondfont); padding: 1rem 2rem; margin-top: 10px; cursor: pointer; }.checkoutNumbers { width: 30px; height: 30px; } /*-------------------------------------------------------------- # My Account - Tabs --------------------------------------------------------------*/ /*/Links/buttons container /*/ ul.tabs { display: block; margin: 0 auto; text-align: center; padding: 0px; list-style: none; } /*/Login & Register Links/*/ ul.tabs li { background: none; text-align: center; color: var(--darkgreen); font-family: var(--mainfont); display: inline-block; padding: 10px 15px; margin: 0 auto; font-size: 2rem; opacity: 50%; cursor: pointer; } /*/Current and selected link/*/ ul.tabs li.current { opacity: 1; } /*/Content Class/*/.tab-content { display: none; padding: 15px; animation: fadeEffect 1.5s; } /*/Current Content Class/*/.tab-content.current { display: inherit; } /* Go from zero to full opacity */ @keyframes fadeEffect { from { opacity: 0; } to { opacity: 1; } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <div id="tabsNav"> <ul class="tabs"> <li class="tab-link current" data-tab="tab-1" data-tab=""> <span>Billing</span> </li> <li class="tab-link" data-tab="tab-2"> <span>Delivery<span> </li> <li class=" tab-link" data-tab="tab-3"> <span>Review &amp; Payment</span> </li> </ul> </div> <.--Tabs Content--> <div id="tab-1" class="tab-content current"> <p>Billing tab.</p> <button data-tab="tab-2" class="next-previous formButton checkout">Continue</button> </div> <div id="tab-2" class="tab-content"> <p>Delivery Tab</p> <button data-tab="tab-3" class="next-previous formButton checkout ">Continue</button> <button data-tab="tab-1" class="next-previous formButton checkout">Back</button> </div> <div id="tab-3" class="tab-content"> <p>Payment tab.</p> </div>

You just need to select the li with the data-tab with your tab_id, eg您只需要 select 带有您的 tab_id 的data-tab的 li,例如

$("*[data-tab=\"" + tab_id+"\"").addClass('current');

This uses the tab_id variable you create and looks for an element with the data-tab value set to this, eg data-tab="tab-2"这将使用您创建的tab_id变量并查找将data-tab值设置为此的元素,例如data-tab="tab-2"

You can see it working here:你可以看到它在这里工作:

 $(document).ready(function () { $('ul.tabs li').click(function () { var tab_id = $(this).attr('data-tab'); $('ul.tabs li').removeClass('current'); $('.tab-content').removeClass('current'); $(this).addClass('current'); $("#" + tab_id).addClass('current'); }); $('button.next-previous').click(function () { var tab_id = $(this).attr('data-tab'); $('ul.tabs li').removeClass('current'); /* find the li that has a data-tab attribute matching this tab_id*/ $("*[data-tab=\"" + tab_id+"\"").addClass('current'); $('.tab-content').removeClass('current'); $(this).addClass('current'); $("#" + tab_id).addClass('current'); $('li').find('ul:first').addClass('moveme'); $('html, body').animate({ scrollTop: $("#tabsNav").offset().top }, 2000); }); });
 :root { --darkgreen: #203631; --background: #f5f5f5; --pinkaccent: #f49393; --white: #fff; --black: #000; }.formButton { display: inline-block; border-radius: 4px; background-color: var(--pinkaccent); border: none; color: #ffffff; text-align: center; font: italic 600 18px var(--secondfont); padding: 1rem 2rem; margin-top: 10px; cursor: pointer; }.checkoutNumbers { width: 30px; height: 30px; } /*-------------------------------------------------------------- # My Account - Tabs --------------------------------------------------------------*/ /*/Links/buttons container /*/ ul.tabs { display: block; margin: 0 auto; text-align: center; padding: 0px; list-style: none; } /*/Login & Register Links/*/ ul.tabs li { background: none; text-align: center; color: var(--darkgreen); font-family: var(--mainfont); display: inline-block; padding: 10px 15px; margin: 0 auto; font-size: 2rem; opacity: 50%; cursor: pointer; } /*/Current and selected link/*/ ul.tabs li.current { opacity: 1; } /*/Content Class/*/.tab-content { display: none; padding: 15px; animation: fadeEffect 1.5s; } /*/Current Content Class/*/.tab-content.current { display: inherit; } /* Go from zero to full opacity */ @keyframes fadeEffect { from { opacity: 0; } to { opacity: 1; } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <div id="tabsNav"> <ul class="tabs"> <li class="tab-link current" data-tab="tab-1" data-tab=""> <span>Billing</span> </li> <li class="tab-link" data-tab="tab-2"> <span>Delivery<span> </li> <li class=" tab-link" data-tab="tab-3"> <span>Review &amp; Payment</span> </li> </ul> </div> <.--Tabs Content--> <div id="tab-1" class="tab-content current"> <p>Billing tab.</p> <button data-tab="tab-2" class="next-previous formButton checkout">Continue</button> </div> <div id="tab-2" class="tab-content"> <p>Delivery Tab</p> <button data-tab="tab-3" class="next-previous formButton checkout ">Continue</button> <button data-tab="tab-1" class="next-previous formButton checkout">Back</button> </div> <div id="tab-3" class="tab-content"> <p>Payment tab.</p> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM