使用Javascript将Class添加到每个第3个元素

Mar*_*ian 4 javascript selector nodes

我正在尝试用javascript选择父级的每个第三个元素,并为其添加一个css类.对我来说听起来很简单,但我无法让它发挥作用.我发现这个线程对我来说看起来很不错,但是我用javascript这样的wuss,我的尝试没有解决:

var nodes = document.getElementsByClassName("ParentsClassName").childNodes;
for(i=0; i<nodes.length; i+=3) {
  this.className += ' newClassName';
}?
Run Code Online (Sandbox Code Playgroud)

当我加载它时,根本没有任何事情发生.
任何修复,eyeopeners和技巧赞赏.
问候,玛丽安

Ray*_*nos 7

var parents = document.getElementsByClassName("someClass"),
    forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach),
    filter = Array.prototype.filter.call.bind(Array.prototype.filter)

forEach(parents, addClassToEveryThirdChild)

function addClassToEveryThirdChild(parent) {
    filter(parent.children, selectEveryThirdChild)
        .forEach(addSomeClass)
}

function selectEveryThirdChild(elem, i) {
    return i % 3 === 0
}

function addSomeClass(elem) {
    elem.classList.add("newClassName")
}
Run Code Online (Sandbox Code Playgroud)

或者循环

var parents = document.getElementsByClassName("someClass")

for (var i = 0, ii = parents.length; i < ii; i++) {
    var parent = parents[i],
        children = parent.children

    for (var j = 0, jj = children.length; j < jj; j++) {
        var elem = children[j]
        if (j % 3 === 0) {
            elem.classList.add("newClassName")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


con*_*att 7

我发现确定每三分之一的最直接方法是在做模数时将 1 添加到索引:

var nodes = //get nodes

for(var i = 0; i < nodes.length; i++) {
  var isThirdIteration = (i + 1) % 3 === 0;

  if (isThirdIteration) {
    this.className += ' newClassName';
  }
}?
Run Code Online (Sandbox Code Playgroud)