2011-03-31 73 views
2

我有一個jQuery函數,它將用一個jPlayer替換每個超鏈接,使用該超鏈接作爲它的源代碼。超鏈接看起來像這樣在HTML:如何使用jQuery將超鏈接文本用作變量?

<div> 
<a href="demos/myfile.mp3" rel = 'jPlayer'>myfile</a> 
</div> 

所以,我已經在我的JavaScript這麼遠是這樣的:

$(document).ready(function() { 
    $('a[rel="jPlayer"]').jPlayer("setMedia", { mp3: $(this).attr("href") }); 
}); 

問題是我無法找出正確的選擇取現有超鏈接的值並將其用於代碼中的mp3:source。也許我甚至沒有使用這個權利,或者它可能是完全不同的,我錯過了。

當我按原樣運行代碼時,Firebug中出現「a.attributes爲null」。誰能幫助解決這個問題嗎?

+0

在某些移動瀏覽器中,由於它們會將優化後的數據發送到手機或設備,因此速度更快,因此需要重新加載頁面時出現$(this)問題。除非你真的需要,否則不要使用它。在這種情況下,你不需要它。下面的第一個答案是更好的解決方案。你甚至可以有$('a [rel =「jPlayer」]')。click(function(){});並將點擊的項目分配給一個變量。 – trgraglia 2011-03-31 08:47:26

+0

還有一些問題,我正在用超級簡單的HTML文件在上面用適當的腳本srcs嘗試它,但鏈接不會更改爲播放器,它只是作爲鏈接保留。我已經嘗試了下面的所有三個函數,他們不會拋出錯誤(所以我知道他們都按預期工作),但仍然有錯誤。也許我不能在超鏈接上使用它? – Chris 2011-03-31 19:18:57

+0

可能與您調用js文件的命令有關...... – trgraglia 2011-04-01 07:02:24

回答

2

的事情是與你的腳本建設:

$('a[rel="jPlayer"]').jPlayer("setMedia", { mp3: $(this).attr("href") }); 

您與此referrring到jPlayer,沒有選擇的值。你應該在其他的方式來使用它,試試這個:

$('a[rel="jPlayer"]').jPlayer("setMedia", { mp3: $('a[rel="jPlayer"]').attr("href") }); 

或eaven

var anchor = $('a[rel="jPlayer"]'); 
anchor.jPlayer("setMedia", { mp3: anchor.attr("href") }); 
+0

這是最接近我的原始代碼,所以它對我來說最有意義,而且看起來和後面的答案一樣好,所以我會選擇這個答案。不幸的是,我有這個jPlayer的其他問題,我想我傾銷它傾向於更簡單的接口。 – Chris 2011-04-01 05:06:24

0

如果this沒有在明顯的方式工作,我會拔出選擇和重新使用它。

$(document).ready(function() {   
  var media_link = $('a[rel=jPlayer]'); 
    media_link.jPlayer("setMedia", { mp3: media_link.attr("href") }); 
}); 

這樣做的唯一的錨元素上調用extend一次,而不是兩次的雙重效果。我通過刪除引號稍微改變了選擇器。

1

頁面上可以有多個鏈接。要正確初始化每個jPlayer實例,您可以遍歷所有鏈接併爲每個匹配元素初始化jPlayer。

$(document).ready(function() { 
    $('a[rel="jPlayer"]').each(function(index){ 
     var link = $(this); 
     link.jPlayer("setMedia", { mp3: link.attr("href") }); 
    }); 
}); 
相關問題