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。在我更换后,它工作得很好!非常感谢你,蒂姆。