首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更短的方法来编写这个jquery切换代码?

有没有更短的方法来编写这个jquery切换代码?
EN

Stack Overflow用户
提问于 2014-02-05 07:45:13
回答 3查看 218关注 0票数 0
代码语言:javascript
复制
    $('#checkout #button-method').on('click', function() {
        $('#button-info').removeClass('pressed').addClass('pointer');
        $('#button-method').addClass('pressed').removeClass('pointer');     
        $('#shipping-info').addClass('hide');
        $('#shipping-method').addClass('add');
    });
    $('#checkout #button-info').on('click', function() {
        $('#button-info').addClass('pressed').removeClass('pointer');
        $('#button-method').removeClass('pressed').addClass('pointer');     
        $('#shipping-info').removeClass('hide');
        $('#shipping-method').removeClass('add');
    });

类'pointer‘的CSS是cursor: pointer;类'pressed’的CSS是背景颜色更改;类'hide‘的CSS是display: none;类'add’的CSS是display: block

有两个按钮(button-method和button-info)。单击button-method时,按钮信息被禁用,shipping-info隐藏,而shipping-method出现。单击button-info时,会发生相反的过程。有没有办法在两个不同的元素上使用toggleClass压缩这段代码?

EN

回答 3

Stack Overflow用户

发布于 2014-02-05 07:56:14

更新:4行jQuery。

当然,还有更好的方法。从你的情况来看,这是最好的方法。

这里的校验码:http://jsfiddle.net/ALsYT/10/

我所做的是将它们放在一个“button”变量中,因为其中一个开始隐藏,所以你必须在加载时执行,我只是使用CSS作为示例,通过同时在这两个变量上切换,我总是在它们之间切换。

HTML:

代码语言:javascript
复制
<button id="button-info" class="green">Button info</button>
<button id="button-method" class="red">Button Method</button>
<br /> <br />
<button id="shipping-info">Shipping info</button>
<button id="shipping-method">Shipping Method</button>

jQuery:

代码语言:javascript
复制
var buttons = $("#button-info, #button-method").on("click", function(){   
    $(buttons).toggleClass('red green');
    var buttons_to_toggle = $("#shipping-info, #shipping-method").toggle();
});

CSS:

代码语言:javascript
复制
.red {background-color:red}
.green {background-color:green}
#shipping-info { display:block; }
#shipping-method { display:none; }
票数 0
EN

Stack Overflow用户

发布于 2014-02-05 08:02:42

您可以使用toggleClass()来交换这些类:

代码语言:javascript
复制
$('#button-method').on('click', function() {
    $('#button-info').toggleClass('pressed pointer');
    $(this).toggleClass('pressed pointer');     
    $('#shipping-info, #shipping-method').toggleClass('hide add');
});
$('#button-info').on('click', function() {
    $(this).toggleClass('pressed pointer');
    $('#button-method').toggleClass('pressed pointer');     
    $('#shipping-info, #shipping-method').toggleClass('hide add');
});

这是一个Fiddle Demo

您的shipping-info和shipping-method类看起来是相同的。如果是这种情况,您可以将它们模块化到一个方法中,以便只将代码放在一个地方。我假设这是一个错误,并相应地编写了解决方案。

您可以进一步压缩它与一个内衬的按钮切换:

代码语言:javascript
复制
$('#button-method').on('click', function() {
    $('#button-method, #button-info').toggleClass('pressed pointer');
    $('#shipping-info, #shipping-method').toggleClass('hide add');
});
$('#button-info').on('click', function() {
    $('#button-info, #button-method').toggleClass('pressed pointer');     
    $('#shipping-info, #shipping-method').toggleClass('hide add');
});

此时,处理程序变得相同,因此您可以将相同的处理程序绑定到两个按钮:

代码语言:javascript
复制
$('#button-info, #button-method').on('click', function() {
    if (!$(this).hasClass('pressed')) {
        $('#button-method, #button-info').toggleClass('pressed pointer');
        $('#shipping-info, #shipping-method').toggleClass('hide add');
    }
});
票数 0
EN

Stack Overflow用户

发布于 2014-02-05 08:15:35

您可以像这样使用toggleClass:

代码语言:javascript
复制
function toggle(condition)
{
    $('#button-info').toggleClass('pressed', !condition).toggleClass('pointer', condition);
    $('#button-method').toggleClass('pressed', condition).toggleClass('pointer', !condition);     
    $('#shipping-info').toggleClass('hide', condition);
    $('#shipping-method').toggleClass('add', condition);
}

$('#button-method').on('click', function() {
    toggle(true);
});
$('#button-info').on('click', function() {
    toggle(false);
});

如果你真的想压缩代码,你可以改变你的html和css,这样就不需要太多的类修改了。

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

https://stackoverflow.com/questions/21565934

复制
相关文章

相似问题

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