IE7中的Javascript模运算

时间:2011-11-16 15:17:14

标签: javascript internet-explorer-7 modulo

为了向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和其他浏览器中运行良好。 有人知道为什么?

2 个答案:

答案 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;
}