2009-11-26 36 views
3

$('form td .hint p')循環此jQuery選擇返回列表[p,p,p,p,p,p]通過組元素中的jquery

我想知道什麼是通過每個那些循環的最佳方式,檢查他們的CSS值,做的東西,如果該CSS值=我想要的東西。

我有這個功能來顯示和隱藏工具提示,但我只想在一次顯示一個提示。在做mouseover和mouseout的工作時,它的錯誤是因爲目前我使用parent(),next()和child()來查找正確的元素,而jquery瞬間插入一個div來包裹我正在顯示和隱藏的元素。所以基本上我試圖強制所有其他p元素有display:block來隱藏每次發生鼠標懸停。

目前這樣做:

target = $('form td .hint p'); 
target[0].css('display') gives an error. 

target.css('display') seems to only return the css of the first one. 
+0

你看過各種提供工具提示功能的jQuery插件嗎?例如docs.jquery.com/Plugins/Tooltip? – 2009-11-26 07:34:32

回答

14

使用each()

var displays = ''; 
$("p").each(function(i, val) { 
    displays += "Paragraph " + i + ": " + $(this).css("display") + "\n"; 
}); 
alert(displays); 

原因失敗:

var target = $("p"); 
var display = target[0].css("display"); 

target[0]一個jQuery對象。你可以這樣做:

var display = $(target[0]).css("display"); 

另外,如果你閱讀文檔css()

返回第一 匹配元素的樣式屬性。其他

有兩點值得一提。

首先,我不會建議自己做一個提示。爲此獲取衆多插件之一。我以前使用過this one,它完成了這項工作。

其次,如果你正在檢查CSS顯示值,有可能是一條捷徑值得使用。舉例來說,你可以這樣做:

$("p").each(function() { 
    if ($(this).css("display") == "none") { 
    $(this).addClass("blah"); 
    } 
}); 

,但你也可以使用:hidden:visible選擇,所以:

$("p:hidden").addClass("blah"); 

檢查的css()呼叫值在很大程度上是不可靠的,你只檢查直列樣式而不是樣式表值。

+0

嘿,其實我只是想出了使用:可見選擇器的技巧。謝謝你的迴應,因爲我需要each()函數來做其他事情。謝謝。 – Chris 2009-11-26 08:02:13