我试着在vanilla js中做兄弟()在jQuery中做的事情。我在这里看到了很多有用的解释,但我在代码中实现它们时遇到了麻烦。
我有一个有4个按钮的div。每次我点击一个按钮,一个类(.btn-anim)就会被添加到那个按钮上(到目前为止,这个工作正常)。我想要做的是,当我单击其中一个按钮(该按钮还没有类)时,删除任何其他按钮的类,并将其添加到所单击的按钮中。
我的Html标记:
<div id="js-colors-div">
<button class="yellow"></button>
<button class="green"></button>
<button class="blue"></button>
<button class="pink"></button>
</div>和Js:
var colorsDiv = document.getElementById('js-colors-div');
var colors = colorsDiv.getElementsByTagName("button");
for (var i = 0; i < colors.length; i++) {
colors[i].onclick = function(e) {
var highlight = e.target;
//trying to achieve this
$(this).addClass('btn-anim').siblings().removeClass('btn-anim');
}
};这是我用来添加类的代码
highlight.classList.add('btn-anim'); // 发布于 2018-02-24 20:17:41
在vanilla JS中,您可以遍历父元素的子元素并跳过元素本身。您可以使用classList方法来添加/删除类:
this.classList.add('btn-anim');
for (let sibling of this.parentNode.children) {
if (sibling !== this) sibling.classList.remove('btn-anim');
}但是请注意,您可以(也是在jQuery中)简化一点:只需从所有按钮中删除类,然后将其添加到当前按钮中:
for (let sibling of this.parentNode.children) {
sibling.classList.remove('btn-anim');
}
this.classList.add('btn-anim');发布于 2018-02-24 20:21:52
您可以使用previousElementSibling和nextElementSibling元素。
var colorsDiv = document.getElementById('js-colors-div');
var colors = colorsDiv.getElementsByTagName("button");
for (var i = 0; i < colors.length; i++) {
colors[i].addEventListener('click', function(e) {
var highlight = e.target;
//trying to achieve this
this.classList.add('btn-anim');
addClassSiblings.bind(this, 'btn-anim')();
});
}
function addClassSiblings(classNames) {
var cs = this.nextElementSibling;
while(cs) {
cs.classList.remove(classNames);
cs = cs.nextElementSibling;
}
cs = this.previousElementSibling;
while(cs) {
cs.classList.remove(classNames);
cs = cs.previousElementSibling;
}
}.yellow {
color: yellow
}
.pink {
color: pink
}
.green {
color: green
}
.blue {
color: blue
}
.btn-anim {
color: black
}<div id="js-colors-div">
<button class="yellow">yellow</button>
<button class="green">green</button>
<button class="blue">blue</button>
<button class="pink">pink</button>
</div>
发布于 2020-09-19 14:58:23
const colorsDiv = document.getElementById('js-colors-div');
const children = [...colorsDiv.children];
children.forEach((el) => {
el.addEventListener('click', (e) => {
children.forEach((btn) => {
btn.classList.remove('active');
})
e.target.classList.add('active');
});
});button {
color: white
}
.yellow {
background: #ffaf00
}
.pink {
background: pink
}
.green {
background: green
}
.blue {
background: blue
}
.active {
background: black
}<div id="js-colors-div">
<button class="yellow">yellow</button>
<button class="green">green</button>
<button class="blue">blue</button>
<button class="pink">pink</button>
</div>
https://stackoverflow.com/questions/48962644
复制相似问题