2010-06-14 44 views
0

使用jQuery 1.4.2,隱藏的過濾器不會過濾出隱藏的元素,但是通過調用show()可以使其可見。過濾器假定它仍然隱藏。show()之後的jQuery假定display:inline是:hidden。爲什麼?

這個錯誤還是我錯過了什麼?考慮以下代碼:

$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").css("display") 
"none" 
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").show() 
Object 
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").css("display") 
"inline" // ?? Let me scratch my head... 
$("td.ms-authoringcontrols > span[id*='_ParallelApprovers']:hidden:first").is(":hidden") 
true //element with "display:inline", visible in browser, but yet it is hidden 

而不是「內聯」,您會期望「無」,因爲:使用隱藏過濾器。

它所做的是從一個對象數組中選擇第一個隱藏元素。每次我調用這些代碼行時,我都希望他們選擇下一個隱藏元素(不是我剛剛展示的元素)。

+2

你應該認真讀一篇關於'performance&selectors'的文章。基本上,你使用的選擇器不會更糟。 – jAndy 2010-06-14 15:30:14

+0

我別無選擇,只能選擇ID包含的位置,因爲ASP.NET會將ID修改爲ClientID(添加父ID前綴)。 – 2010-06-15 07:27:51

回答

2

假設.show()線性發生,您的代碼將是正確的。但是,.show()開始以顯示對象結束的動畫。如果您想在執行代碼後執行代碼,請使用帶有動畫長度和回調的替代形式.show(100,function(){})

+0

謝謝。當我指定動畫長度時,它現在按預期工作。 – 2010-06-15 07:33:32

相關問題