jQuery通过3个按钮在一个元素上切换多个类
好的,我想让3个不同的按钮控制一个元素的类。但是一次只能使用一个类,所以我需要删除未使用的两个类 按钮:jQuery通过3个按钮在一个元素上切换多个类,jquery,Jquery,好的,我想让3个不同的按钮控制一个元素的类。但是一次只能使用一个类,所以我需要删除未使用的两个类 按钮: <ul class="group"> <li> <a href="#" class="small-btn">Small</a> </li> <li> <a href="#" class="med-btn">Medium</a> </li> <li> <a href="
<ul class="group">
<li> <a href="#" class="small-btn">Small</a> </li>
<li> <a href="#" class="med-btn">Medium</a> </li>
<li> <a href="#" class="large-btn">Large</a> </li>
</ul>
我的内容包装器:
<div id="main_content" class="large">
content here
</div>
满足于此
我脑子里想不出如何对照其他两个类检查并删除它们?有没有办法将类作为变量存储在jQuery中?感谢您的帮助。编辑:删除了我的其他方法,留下了这个方法(我最喜欢的方法;-)
编辑:删除了我的其他方法,留下这一种(我最喜欢的方法;-)
我建议,尽管未经测试:
$('ul.group a').click(function(e){
e.preventDefault();
var $self = $(this);
$('#main_content').attr('class', $.trim($self.text().toLowerCase()));
});
这假设要添加的新类是元素的文本,而不是正在单击的元素的类名,这在您的问题中并不清楚,但是如果您希望单击的元素的类成为#main_content
的类,那么我建议改为以下内容:
$('ul.group a').click(function(e){
e.preventDefault();
var self = this;
$('#main_content').attr('class', self.className);
});
参考资料:
$('ul.group a').click(function(e){
e.preventDefault();
var $self = $(this);
$('#main_content').attr('class', $.trim($self.text().toLowerCase()));
});
这假设要添加的新类是元素的文本,而不是正在单击的元素的类名,这在您的问题中并不清楚,但是如果您希望单击的元素的类成为#main_content
的类,那么我建议改为以下内容:
$('ul.group a').click(function(e){
e.preventDefault();
var self = this;
$('#main_content').attr('class', self.className);
});
参考资料:
<ul class="group">
<li> <a href="#" class="small-btn" data-class="small">Small</a> </li>
<li> <a href="#" class="med-btn" data-class="medium">Medium</a> </li>
<li> <a href="#" class="large-btn" data-class="large">Large</a> </li>
</ul>
演示:我建议使用data-*属性指定目标类名
<ul class="group">
<li> <a href="#" class="small-btn" data-class="small">Small</a> </li>
<li> <a href="#" class="med-btn" data-class="medium">Medium</a> </li>
<li> <a href="#" class="large-btn" data-class="large">Large</a> </li>
</ul>
演示:这里有一个简单而干净的解决方案:
$(document).ready(function () {
$("[class$='btn']").click(function() {
var $container = $('#main_content');
$container.removeClass();
var cls = $(this).attr('class');
$container.addClass(cls.substring(0, cls.indexOf("-")));
});
});
这里有一个简单而干净的解决方案:
$(document).ready(function () {
$("[class$='btn']").click(function() {
var $container = $('#main_content');
$container.removeClass();
var cls = $(this).attr('class');
$container.addClass(cls.substring(0, cls.indexOf("-")));
});
});
如果
#main_content
元素上应该只有一个类,则可以使用removeClass()
删除所有类,但不带任何参数,然后添加所需的类。不需要任何检查。或者只需更改属性值,如我的答案所示。这将重置整个属性。@Rorymcrossan谢谢,我不知道我可以将参数留空:)如果#main_content
元素上只有一个类,您可以使用removeClass()
删除所有类,而不带任何参数,然后添加所需的类。不需要任何检查。或者只需更改属性值,如我的答案所示。这将重置整个属性。@Rorymcrossan谢谢,我不知道可以将参数留空:)这感觉比其他解决方案更干净,使父类独立于子类。子类可能甚至不是必需的。我会这样做,但我会使用委托来代替('code>$('.group')。在('click','a',function(){…})上代码>这感觉比其他解决方案更干净,保持父类独立于子类。子类可能甚至不是必需的。我会这样做,但我会使用委托来代替('code>$('.group')。在('click','a',function(){…})上谢谢你,真的帮了我的忙。只同意上面的答案,因为它稍微干净一点,但感谢玛娜,谢谢你的好话。上面的答案也是我自己的答案。我想在第三次迭代中,我会想出一些更接近这个的东西;-)谢谢你,真的帮了我的忙。只同意上面的答案,因为它稍微干净一点,但感谢玛娜,谢谢你的好话。上面的答案也是我自己的答案。我想在第三次迭代中,我会想出一些更接近这个的东西;-)通常,当我看到$…
变量命名约定时,我将其视为jQuery元素。你的$class
变量违反了这个约定(并且是全局的),如果你想从链接类中获取新类,class.replace('-btn','')
会更干净一些。同意$class variable通常当我看到$…
变量命名约定时,我认为它是一个jQuery元素。您的$class
变量违反了此约定(并且是全局变量),如果要从链接类中获取新类,class.replace('-btn','')
会更干净一些。同意$class变量吗