5

我正在尝试使用 javascript 选择父级的每三个元素并向其添加一个 css 类。对我来说听起来很简单,但我无法让它工作。我发现这个线程对我来说看起来很不错,但是我对 javascript 非常不满意,以至于我的尝试没有成功:

var nodes = document.getElementsByClassName("ParentsClassName").childNodes;
for(i=0; i<nodes.length; i+=3) {
  this.className += ' newClassName';
}​

当我加载这个时,什么都没有发生。
任何修复,大开眼界和提示表示赞赏。
问候,玛丽安

4

4 回答 4

8
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")
}

或带循环

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")
        }
    }
}
于 2012-04-30T14:13:46.530 回答
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';
  }
}​
于 2016-10-25T20:33:42.933 回答
3

你可以用纯 CSS 来做到这一点。不需要 Javascript ;)

例子:.parent .child:nth-of-type(3n+3)

于 2015-02-25T11:12:17.493 回答
0

这将返回一个元素列表:

document.getElementsByClassName("ParentsClassName")

您可以遍历列表,或选择一个索引:

document.getElementsByClassName("ParentsClassName")[0].childNodes;
于 2012-04-30T14:16:06.997 回答