首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加和删除代码行较少的类

添加和删除代码行较少的类
EN

Stack Overflow用户
提问于 2017-06-02 13:34:47
回答 6查看 76关注 0票数 0

我正在努力学习如何缩短我的jQuery代码。任何建议或建议都是很棒的:

代码语言:javascript
复制
jQuery(document).ready(function($){ 

  $('#checkout_timeline #timeline-4').click(function() {
    if ($('#checkout_timeline #timeline-4').hasClass('active')) {
      $('#checkout-payment-container').addClass('cpc-visible');
    } 
  });

  $('#checkout_timeline #timeline-1, #checkout_timeline #timeline-2, #checkout_timeline #timeline-3').click(function() {
    $('#checkout-payment-container').removeClass('cpc-visible');
  });

});

为了避免混乱,请在这里找到工作版本:我的JSFiddle代码

我知道我可以使用.show().hide(),但是由于其他的CSS考虑,我想应用.cpc-visible

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-06-02 14:59:42

这里有一些你可以改进的地方。首先,你说得太多了。身份证是独一无二的。不需要选择#checkout_timeline #timeline-4,只要#timeline-4就行了。但是为什么每个li都有ids呢?您可以使用:nth-child(n)选择器按数字引用它们。或者更好的是,您已经给它们指定了特定于应用程序的类名,如billingshipmentpayment。用那些!让我们将原始内容简化为:

代码语言:javascript
复制
<ul id="checkout_timeline">
  <li class='billing'>Billing</li>
  <li class='shipping'>Shipping</li>
  <li class='confirm'>Confirm</li>
  <li class='payment active'>Payment</li>
</ul>

<div id='checkout-payment-container' class='cpc-visible'>
  This is the container to show and hide.
</div>

注意,我离开了active类,并使用cpc-visible进一步初始化了签出div,以反映支付处于活动状态。通常,我会保持HTML尽可能简单,并在代码中放置“起始位置”初始化。但是“为了一分钱,一英镑”如果我们从支付活动开始,那么最好通过这个决定,并以一致的状态启动依赖的div。

现在,修改后的JavaScript:

代码语言:javascript
复制
jQuery(document).ready(function($) { 
  $('#checkout_timeline li').click(function() {
    // make clicked pane active, and the others not
    $('#checkout_timeline li').removeClass('active');
    $(this).addClass('active');

    // show payment container only if payment pane active
    var paymentActive = $(this).hasClass('payment');
    $('#checkout-payment-container').toggleClass('cpc-visible', paymentActive);
  });
});

此代码更不特定于项。它不尝试为不同的选项卡/窗格添加单独的单击处理程序。他们都有相同的处理程序,这就做出了一组统一的决策。首先,单击哪个窗格,使其处于活动状态,而其他窗格不处于活动状态。它通过移除所有active类,然后将active放在当前选定的窗格中来实现这一点。第二,它问“当前窗格是支付窗格吗?”并使用toggleClass API相应地设置cpc-visible类。通常,这种“基于布尔条件的set类”逻辑比尝试对适当的addClassremoveClass调用更简单和更可靠。

我们就完蛋了。下面是一个JSFiddle,它显示了这一点。

票数 3
EN

Stack Overflow用户

发布于 2017-06-02 13:39:20

尝试如下:您可以用timelineactive类使用jquery选择器绑定单击事件处理程序,在其中可以添加所需的类。相同的选择器,但没有active类来删除类。

当您添加/删除元素时,这将是非常有用的,并且会更加灵活。

代码语言:javascript
复制
jQuery(document).ready(function($){ 
  $('#checkout_timeline .timeline.active').click(function() {
      $('#checkout-payment-container').addClass('cpc-visible');
  });
  $('#checkout_timeline .timeline:not(.active)').click(function() {
     $('#checkout-payment-container').removeClass('cpc-visible');
  });
});

JSFIddle

票数 1
EN

Stack Overflow用户

发布于 2017-06-02 13:39:23

以下是使用:not()缩短这段代码的方法之一。另外,使用元素比引用元素更好,并且总是通过JQuery获取它们。

代码语言:javascript
复制
jQuery(document).ready(function($) {
  var showHideContainer = $('#checkout-payment-container');
  $('#checkout_timeline .timeline.active').click(function() {
    showHideContainer.addClass('cpc-visible');
  });

  $('#checkout_timeline .timeline:not(.payment)').click(function() {
    showHideContainer.removeClass('cpc-visible');
  });

});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44330268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档