为了向List中的每个第三项添加一个类,我正在使用这样的模运算:
var projectElements = document.getElementById("projectList").children;
var iCount = 0;
for (var i in projectElements) {
iCount++;
if (iCount % 3 == 0) {
if (projectElements[i].className == "") {
projectElements[i].className += "projectLinkLast";
}
else {
projectElements[i].className += " projectLinkLast";
}
}
}
除了Internet Explorer 7之外,它在Firefox和其他浏览器中运行良好。 有人知道为什么?
答案 0 :(得分:1)
尝试使用.setAttribute("className", "blah")
而不是.className。
在JSFiddle上有一个代码演示,似乎正在运行:http://jsfiddle.net/LWsTn/6/
如果你要使用jQuery。使用:
$("#projectList :nth-child(3n").addClass("projectLinkLast");
文档:http://api.jquery.com/nth-child-selector/
jQuery正在使用的addClass方法可能有帮助
classNames = value.split(rspace);
for (i = 0, l = this.length; i < l; i++) {
elem = this[i];
if (elem.nodeType === 1) {
if (!elem.className && classNames.length === 1) {
elem.className = value;
} else {
setClass = " " + elem.className + " ";
for (c = 0, cl = classNames.length; c < cl; c++) {
if (!~setClass.indexOf(" " + classNames[c] + " ")) {
setClass += classNames[c] + " ";
}
}
elem.className = jQuery.trim(setClass);
}
}
}
答案 1 :(得分:1)
问题不在于模运算符。问题可能是您在宿主对象上使用for...in
(在这种情况下,是元素的children
属性),这是一个坏主意,并且不能保证按预期工作(或者确实在所有)。此外,并非所有浏览器都支持children
(尽管它在IE 7中,因此这不是该浏览器中的问题)。我会建议以下内容:
var iCount = 0, child = document.getElementById("projectList").firstChild;
while (child) {
if (child.nodeType == 1) { // Only deal with elements
iCount++;
if (iCount % 3 == 0) {
if (child.className == "") {
child.className = "projectLinkLast";
}
else {
child.className += " projectLinkLast";
}
}
}
child = child.nextSibling;
}