javascript - 什么是删除除 jquery 中的一个之外的所有类的更清洁方法,如果还没有该类,也无需添加该类
问题描述
好吧,有一种流行的方法可以清理所有类,除了像
jQuery('#d-one label').attr('class', 'main');
main
但是,即使一开始没有类,上面的代码也会添加类。
一种解决方法是检查它是否具有类main
并相应地执行。但是有没有比这更干净、更短的方法呢?
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="d-one">
<label for="" class="main one two three"></label>
</div>
<script>
jQuery('#d-one label').attr('class', 'main');
console.log(jQuery('#d-one label').attr('class'));
</script>
<div id="d-two">
<label for="" class="one two three"></label>
</div>
<script>
jQuery('#d-two label').attr('class', 'main');
console.log(jQuery('#d-two label').attr('class'));
</script>
<!-- This not just remove, but also add new class -->
<div id="d-three">
<label for="" class="one two three"></label>
</div>
<script>
if($( "#d-three label" ).hasClass( "main" )){
jQuery('#d-three label').attr('class', 'main');
}else{
jQuery('#d-three label').removeClass();
}
console.log(jQuery('#d-three label').attr('class'));
</script>
解决方案
以下应该有效:
jQuery('#d-one label').filter('.main').attr('class', 'main')
.end().not('.main').removeClass()
它首先选择<label>
下的所有元素#d-one
,然后过滤“main”类并将它们设置为class="main"
。之后,过滤器被撤销(.end()
)并且所有“非.main
”元素都被清除所有可能的类。
$('#d-one label').filter('.main').attr('class', 'main')
.end().not('.main').removeClass()
.one {border: red 1px solid}
.two {background-color: #ccc}
.three {color: green}
.main {font-weight:900}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="d-one">
<div id="d-four">
<label for="" class="main one two three">label: main stays and one two three removed!</label>
</div>
<div id="d-two">
<label for="" class="one two three">label: one two three removed!</label>
</div>
<div id="d-three">
<label for="" class="one two three">label: one two three removed!</label>
</div>
</div>
</div>
<div id="d-five">
<label for="" class="main one two three">label: main one two three - unchanged</label>
</div>
推荐阅读
- jenkins - httpRequest 之后的函数行不在 groovy jenkins 管道中执行
- python - Python线程内存泄漏
- spring - 用于大约需要 1 分钟的任务的 Spring 队列 Web 服务
- javascript - 反应:无法将属性“lastEffect”设置为空
- node.js - 在 Heroku Node.js 应用上上传图片时出错
- c# - 在 xtragrid 中双击一个单元格,该值应显示在lookupedit中
- vuex - 在“通用”模式下使用 NuxtJs 管理 Vuex 状态
- c# - 将所有组件放在一个类下,使它们成为静态并从所有其他脚本中引用它们是否可行?(在 Unity 中使用 C#)
- angular - ngx-select-dropdown 示例值未绑定
- c++ - C++中递归函数的功能