Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE7中的Javascript模运算_Javascript_Internet Explorer 7_Modulo - Fatal编程技术网

IE7中的Javascript模运算

IE7中的Javascript模运算,javascript,internet-explorer-7,modulo,Javascript,Internet Explorer 7,Modulo,为了向列表中的每三个项目添加一个类,我使用了如下的模运算: var projectElements = document.getElementById("projectList").children; var iCount = 0; for (var i in projectElements) { iCount++; if (iCount % 3 == 0) { if (projectElements[i].className == "") {

为了向列表中的每三个项目添加一个类,我使用了如下的模运算:

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和除InternetExplorer7之外的其他浏览器中工作良好。
有人知道为什么吗?

尝试使用
.setAttribute(“className”,“blah”)
而不是.className

在JSFIDLE上获得了您的代码演示,似乎正在运行:

如果要使用jQuery。使用:

$("#projectList :nth-child(3n").addClass("projectLinkLast");
文件:

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);
        }
    }
}
classNames=value.split(rspace);
对于(i=0,l=this.length;i
问题不在于模运算符。问题可能是您在宿主对象上使用了
for…in
(在本例中,是元素的
子属性),这是一个坏主意,不能保证按预期工作(或者根本不能)。而且,并非所有浏览器都支持
子项
(尽管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;
}

模不是问题所在,我相信它与添加类名有关。您可能想考虑jQuery添加在IE7中的投影长度的类,发送一个链接来演示该问题的实时演示。@ JeleMG:在没有jQuery的情况下添加一个元素到一个元素是微不足道的:<代码> el.CordNe++=“FoO”< /C>。如果愿意,可以检查空的
类名
是否整洁,但这不是必需的。就是这样。建议更改为
setAttribute(“className”)
真是个糟糕的建议。
className
属性在所有主流浏览器中都是坚如磐石的,而
setAttribute(“className”)
除了旧版本的IE之外,在任何情况下都不起作用,旧版本的IE有一个坏的
setAttribute()
实现,可以将属性映射到属性。好的一点,你完全正确,但是如果setAttribute在他的IE7中起作用,这本可以解决的。因为那时他两个都能用。更新了我的帖子,jQuery使用了一个示例。你写的是childCount,但意思是iCount。在我更换后,它工作得很好!非常感谢你,蒂姆。