首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vanilla javascript中实现siblings()

在vanilla javascript中实现siblings()
EN

Stack Overflow用户
提问于 2018-02-24 20:04:08
回答 4查看 9.2K关注 0票数 9

我试着在vanilla js中做兄弟()在jQuery中做的事情。我在这里看到了很多有用的解释,但我在代码中实现它们时遇到了麻烦。

我有一个有4个按钮的div。每次我点击一个按钮,一个类(.btn-anim)就会被添加到那个按钮上(到目前为止,这个工作正常)。我想要做的是,当我单击其中一个按钮(该按钮还没有类)时,删除任何其他按钮的类,并将其添加到所单击的按钮中。

我的Html标记:

代码语言:javascript
复制
<div id="js-colors-div">
  <button class="yellow"></button>
  <button class="green"></button>
  <button class="blue"></button>
  <button class="pink"></button>
</div>

和Js:

代码语言:javascript
复制
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');          

    }
};

这是我用来添加类的代码

代码语言:javascript
复制
highlight.classList.add('btn-anim'); // 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-24 20:17:41

在vanilla JS中,您可以遍历父元素的子元素并跳过元素本身。您可以使用classList方法来添加/删除类:

代码语言:javascript
复制
    this.classList.add('btn-anim');
    for (let sibling of this.parentNode.children) {
        if (sibling !== this) sibling.classList.remove('btn-anim');
    }

但是请注意,您可以(也是在jQuery中)简化一点:只需从所有按钮中删除类,然后将其添加到当前按钮中:

代码语言:javascript
复制
    for (let sibling of this.parentNode.children) {
        sibling.classList.remove('btn-anim');
    }
    this.classList.add('btn-anim');
票数 14
EN

Stack Overflow用户

发布于 2018-02-24 20:21:52

您可以使用previousElementSiblingnextElementSibling元素。

代码语言:javascript
复制
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;
  }
}
代码语言:javascript
复制
.yellow {
  color: yellow
}

.pink {
  color: pink
}

.green {
  color: green
}

.blue {
  color: blue
}

.btn-anim {
  color: black
}
代码语言:javascript
复制
<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>

票数 1
EN

Stack Overflow用户

发布于 2020-09-19 14:58:23

代码语言:javascript
复制
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');
  });
});
代码语言:javascript
复制
button {
  color: white
}

.yellow {
  background: #ffaf00
}

.pink {
  background: pink
}

.green {
  background: green
}

.blue {
  background: blue
}

.active {
  background: black
}
代码语言:javascript
复制
<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>

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

https://stackoverflow.com/questions/48962644

复制
相关文章

相似问题

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