javascript动态添加和删除类

标签 javascript html css

<分区>

我正在研究一个简单的例子,如果用户点击元素,那么它上面的所有元素都应该有一个类,而它下面的所有元素都不应该应用任何类。

这是我的代码:

<script>
function test(object) {
    var pid = object.id;
    var id = parseInt(pid.split("")[1]);
    console.log(id);
    for (var i = 1; i <= id; i++) {
        var element = document.getElementById("p"+i);
        console.log(element);
        element.className = "active";
    }
    console.log(id+1);
    for(var i = id+1; i <= 4; i++) {
        var element = document.getElementById("p"+i);
        element.className.replace(new RegExp('(?:^|\\s)'+ 'active' + '(?:\\s|$)'), ' ');
        console.log(element);
    }
}   
</script>

<div id="divid">
    <p id="p1" onclick="test(this)">one</p>
    <p id="p2" onclick="test(this)">two</p>
    <p id="p3" onclick="test(this)">three</p>
    <p id="p4" onclick="test(this)">four</p>
</div>

所以在这里,如果我点击三,那么一、二、三的元素应该有类 active 而元素四不应该有任何类。这工作正常。

现在,如果我点击一个,我希望二、三、四应该有任何 css 类,但它不是那样工作的。

你能帮我看看问题出在哪里吗?我想使用纯 Javascript。

最佳答案

由于关注点分离,考虑使用 onclick 属性的替代方法可能是明智的。以下内容允许您在工作时无需考虑 JavaScript 即可更改 HTML。

https://jsfiddle.net/gseh0wxc/2/

var getList = (selector) => [].slice.call(document.querySelectorAll(selector));

var paragraphs = getList("#divid p[id ^= 'p']");
paragraphs.forEach((paragraph, index) => {
  paragraph.addEventListener('click', (e) => {
    for (let i = 0; i < index; i++) {
      paragraphs[i].classList.remove('active');
    }
    for (let i = index; i < paragraphs.length; i++) {
      paragraphs[i].classList.add('active');
    }
  });
})

关于javascript动态添加和删除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45110553/

相关文章:

javascript - 如何从阵列列表中添加多个音轨

javascript - 使用 Javascript 的响应式菜单,问题

javascript - 语义 react ui 弹出关闭按钮

javascript - 在 HTML5UP 主题中使用视频 'Lens'

html - 展示图片和轮播标题

javascript - Nodejs session 在生产环境中不持久

javascript - 位置 :absolute is floating over the element

javascript - 如何使用 CSS 缩小另一个 div 中的 div?

html - 将空的非必填输入字段设为无效

css - 爬虫友好的 CSS 色带