2014-05-01 43 views
-1

我有一個關於jquery選擇器的基本問題。jquery - 讓選擇器改變所有適當的屬性,而不只是第一個找到

$(function() { 
    $('.grid').hover(function(){ 
    var divId = $(this).attr("divId"); 
    var $this = $('#' + divId); 
    var newSource = $this.data('alt-src'); 
    $this.data('alt-src', $this.attr('src')); 
    $this.attr('src', newSource); 
    }); 
}); 

如果我懸停在與類=「網格」,如何能擁有所有的div一個div通過變量$此= $(「#」 + DIVID)發現;改變他們的圖片?意思是說,當這個函數執行時,只有第一個具有合適的id的div有它的img src改變。我想這樣做,所有具有適當id(屬性)的div都會改變,而不是第一次改變。

此外,我將不勝感激任何幫助,我可以修改這個,以便當img改變它在'慢'淡入淡出。

謝謝。

+3

你不應該使用多個具有相同ID的元素,請嘗試使用類 – juvian

+0

jQuery知道ID必須是唯一的,所以ID選擇器永遠不會匹配多個元素。 – Barmar

回答

1

ID和Class屬性之間的特定區別是ID預期始終是唯一的,而類旨在用於標識共享一個通用分組的一組元素。如果您有多個具有相同ID的元素,則說明您使用的HTML不正確。通過重寫代碼使每個元素都有一個唯一的ID,您可以依靠這些ID來標識它們關聯的特定元素,然後給出您想要一起選擇特定類的元素組,這是適當的方式選擇一組您想要的元素。

+0

謝謝你完全解釋它。所以,如果我改變它按類來分組,我遇到了一個jQuery問題,其中第一個圖像src最終顯示在其他div。我不確定我做錯了什麼。任何幫助將不勝感激。 http://jsfiddle.net/LmVRZ/214/ – user2004710

+1

這是你的小提琴的工作版本:http://jsfiddle.net/LmVRZ/222/ 你的問題是,你試圖直接訪問你的$ this元素,但是這個元素引用了整個元素組,所以你實際上只能爲它們獲取一個值。通過使用.each(),您可以在選定組中的每個項目上運行一個函數。如果您有任何其他問題,請告訴我! –

+0

謝謝。我曾嘗試過類似var $ this = $('。'+ divId).each(function(){但無法讓它工作。再次感謝。如果不介意,最後一個問題是否可以包含一個計時函數,像處理懸停handlerIn和Out事件函數時的fadeIn和fadeOut一樣? – user2004710

相關問題