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