2013-04-13 37 views
0

我使用.each()before()來自動插入類'pipe1'的音頻元素在類'product_name'的每個元素之前的懸停效果,因爲單個音頻元素不能自身重疊,因此每個按鈕都需要自己的音效。使用jquery的.closest訪問音頻元素不工作?

我知道插入工作,因爲當我檢查頁面,我看到的元素。直接訪問時播放的元素,但現在使用.closest()它不起作用。任何幫助是極大的讚賞。

以下是生成的HTML,我發現Firefox的「檢查元素」:

<audio class="pipe1"> 
    <source src="/frontshift/audio/pipe1.mp3"></source> 
    <source src="/frontshift/audio/pipe1.ogg"></source> 
</audio> 
<span class="product_name">Product</span> 

所有我在同一個.hover效果被激活使用的代碼,這是$(".product_name").hover()

下面的代碼成功播放音頻:

$(".pipe1")[0].currentTime = .04; 
$(".pipe1")[0].play(); 

下面的代碼並不:

$(this).closest(".pipe1").currentTime = .04; 
$(this).closest(".pipe1").play(); 

以下警告變成了不確定:

alert($(this).closest(".pipe1").attr("class")); 
+0

如果你的代碼是在連接到'.product_name'元素的處理程序,那麼會怎樣'.closest()'能找到''

回答

5

.closest()選擇祖先,選擇前一個兄弟使用.prev()

var audio = $(this).prev(".pipe1")[0]; 
audio.currentTime = .04; 
audio.play(); 
+0

我是怎麼編輯這篇文章的? – andlrc

+0

你沒有真正編輯它,你只是建議編輯。它在生效之前還需要得到批准。感謝你,穆薩,我覺得自己像個假人。 –

+0

順便說一句,你能告訴我爲什麼[0]是必要的,因爲它應該只選擇一個元素呢? –

0

您需要從jQueryObject獲得DOM節點:

$(this).closest(".pipe1").get(0).currentTime = 0.4 

或使用像行爲陣:

$(this).closest(".pipe1")[0].currentTime = 0.4 

你確定上下文(this)是指音頻標籤內的元素?

0

是的,你應該使用$(this).prev('.pipe1');

+0

應該是一個評論dont'cha認爲? – lifetimes

+0

是的,我想回復@am不是我,但我沒有找到如何。 – rgandoin

+0

他的名聲太低,除了他自己的帖子外,沒有什麼評論。 –