$('#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压缩这段代码?
发布于 2014-02-05 07:56:14
更新:4行jQuery。
当然,还有更好的方法。从你的情况来看,这是最好的方法。
这里的校验码:http://jsfiddle.net/ALsYT/10/
我所做的是将它们放在一个“button”变量中,因为其中一个开始隐藏,所以你必须在加载时执行,我只是使用CSS作为示例,通过同时在这两个变量上切换,我总是在它们之间切换。
HTML:
<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:
var buttons = $("#button-info, #button-method").on("click", function(){
$(buttons).toggleClass('red green');
var buttons_to_toggle = $("#shipping-info, #shipping-method").toggle();
});CSS:
.red {background-color:red}
.green {background-color:green}
#shipping-info { display:block; }
#shipping-method { display:none; }发布于 2014-02-05 08:02:42
您可以使用toggleClass()来交换这些类:
$('#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类看起来是相同的。如果是这种情况,您可以将它们模块化到一个方法中,以便只将代码放在一个地方。我假设这是一个错误,并相应地编写了解决方案。
您可以进一步压缩它与一个内衬的按钮切换:
$('#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');
});此时,处理程序变得相同,因此您可以将相同的处理程序绑定到两个按钮:
$('#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');
}
});发布于 2014-02-05 08:15:35
您可以像这样使用toggleClass:
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,这样就不需要太多的类修改了。
https://stackoverflow.com/questions/21565934
复制相似问题