IE7中的Javascript模操作

Javascript modulo operation in IE7

本文关键字:操作 Javascript 中的 IE7      更新时间:2023-09-26

对于在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";
        }
    }
}

它在Firefox和除Internet Explorer 7以外的其他浏览器中运行良好。有人知道为什么吗?

问题不是模算符。问题可能是您在宿主对象(在本例中是元素的children属性)上使用了for...in,这是一个糟糕的主意,不能保证按预期工作(或者根本不能保证按预期工作)。此外,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;
}

尝试使用.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);
        }
    }
}