0

为什么下面的代码在IE浏览器(7和8)中不起作用?jQuery:attr风格在IE中不起作用

$("ul li").each(function() { 
    if(($.trim($(this).attr("style"))) != "display: none;"){ 
    //if content 
    }else if(($.trim($(this).attr("style"))) == "display: none;"){ 
    //else content 
    } 
}); 

注意:前4个li元素没有“样式”属性,其余8个元素没有。

+1

哈克,我们可以普莱舍看到,该室内用的HTML? – mcgrailm 2011-05-31 13:30:17

+1

你可以告诉我们在http://jsfiddle.net/ – SinistraD 2011-05-31 13:30:23

+0

你使用的是什么版本的jquery? – mcgrailm 2011-05-31 13:32:13

回答

4

不检查style属性。它不一定会返回当前的现实,也不会考虑其他地方定义的任何样式。

使用:hidden过滤器,或者使用css方法:

if ($(this).is(':hidden')) { 

} 

// or 

if ($(this).css('display') == 'none') { 

} 

我通常喜欢第一种语法,因为它需要多一点考虑的不仅仅是display风格。

+0

非常感谢..我使用了第二种方法。它的工作原理很好 – 2011-05-31 14:34:16

+0

@Pack很高兴帮助。如果答案解决了您的问题,您可以[标记为已接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – lonesomeday 2011-05-31 14:42:44

0

使用此代码来代替:

("ul li").each(function() { 
    if(($.trim($(this).css("display"))) != "none"){ 
    //if content 
    }else if(($.trim($(this).css("display"))) == "none"){ 
    //else content 
    } 
}); 
0

您正在比较的属性的attribut,显示是一个元素属性,而不是一个属性。

更好地与这样的:

if(($.trim($(this).is(':visible')) { 
    // it's visible, do something 
} 
else { // no need for second condition, we *know* it's not visible! 
    // it's not visible so do something else 

} 
+0

如果您在布尔值上调用'$ .trim',它将始终返回一个真值字符串。 '$ .trim(false)'是'“false”'。 – lonesomeday 2011-05-31 14:19:38